yosaku_ibs
@yosaku_ibs

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

redirect_toが送信するHTTPメソッドの謎

Q&A

Closed

解決したいこと

「redirect_toは遷移するURLを指定できるメソッド」ですが
遷移先にはどんなHTTPメソッドを送信するのでしょうか?
GETメソッドでしょうか?

自分で試したこと

Railsドキュメントやグーグル検索で検索しましたが
手がかりが見つかりませんでした。

以上、お手数ではございますが
もしご存知の方がいらっしゃいましたら
ご教示の程よろしくお願い申し上げます。

1

2Answer

リダイレクトについては、例えばこちらが参考になると思います。
Railsのredirect_toなど、ライブラリやフレームワークが提供するリダイレクトはこの仕組みを使うものです。

遷移先にはどんなHTTPメソッドを送信するのでしょうか?
GETメソッドでしょうか?

上記のリンク先で説明されていますが、ステータスコードによります。
よく利用される301 302 303などはGETメソッドになりますが、
307 308 はGETメソッドに限りません。

ただredirect_toがすべてのステータスコードに対応しているのかは分かりません。
Railsは詳しくないので。。

1Like

Comments

  1. @yosaku_ibs

    Questioner

    @blue32a様

    こんにちは。
    いつも大変お世話になっております。
    ご回答くださりありがとうございます。
    ステータスコードによって変化するのですね。
    ご紹介頂いたリンク先を確認させて頂こうと思います。

    ご教示くださり誠にありがとうございました!
  2. @yosaku_ibs

    Questioner

    @blue32a様

    いつも大変お世話になっております。
    @blue32a様からご教示頂きました「ステータスコード」
    というワードを使って再度調べてみますと、
    Railsのredirect_toは返すHTTPステータスが指定されていない時は302が返されることがわかりました。

    @blue32a様より「302はGETメソッドになる」というお話がございましたが、この情報はリファレンスのどの部分に書かれているのでしょうか?
    誠にお手数ではございますが、ご教示お願い致します。
  3. @yosaku_ibs

    Questioner

    @blue32a様

    いつも大変お世話になっております。
    リンク先確認致しました。
    しかしまだ理解できません...。

    以下のメソッド内に「redirect_to edit_user_path 」という記述があるのですが、このコードが送信するHTTPメソッドはGETなのでしょうか?

    ```
    def update
    @user = User.find(session[:user_id])
    user_params = params.require(:user).permit(:name, :email)
    if @user.update(user_params)
    flash[:notice] = "更新しました"
    redirect_to edit_user_path
    else
    flash.now[:alert] = "更新に失敗しました"
    render "edit"
    end
    end
    ```

    重ね重ね申し訳ございません。
    ご教示お願い致します。。。。

以下のメソッド内に「redirect_to edit_user_path 」という記述があるのですが、このコードが送信するHTTPメソッドはGETなのでしょうか?

Railsは詳しくないのですが、302 FoundでリダイレクトしているならGETになると思います。
実際に確認してみるのが良いでしょう。

リクエストやレスポンスをトレースする機能が、ブラウザ自体やブラウザの拡張機能などであったりします。
例えばこれは簡単なスクリプトで試した例です。
/index.htmlからPOST /redirect.phpに遷移し、そこから302 Foundでリダイレクトしたものです。
(画像はchromeブラウザのデベロッパーツール)

/index.htmlからPOST /redirect.phpに遷移した時

formタグで遷移したものです。
Locationはリダイレクト先です。

post_to_redirect.png

redirect.phpから302 Foundでリダイレクトした時

リダイレクトした後はGETになっています。

redirect_to_receive.png

1Like

Comments

  1. @yosaku_ibs

    Questioner

    @blue32a様

    いつも大変お世話になっております。
    丁寧な解説ありがとうございます。
    写真もあるのでわかりやすくて助かります。。。
    ご教示頂いた方法で試して確認してみます!
    いつもありがとうございます。

    以上、御礼申し上げます。

Your answer might help someone💌