302
応答と303
応答の違いは何ですか?
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
これらは交換可能ですか、それともなぜ一方が他方に使用されるのでしょうか? 1つが使用される(そしてもう1つは使用されない)ユースケースを教えていただけませんか?
リンク先のページの説明は、意図した目的をかなり説明しているようです。
302リダイレクトは、リダイレクトが一時的-であることを示します。クライアントは、今後のリクエストで元のURLに戻ってチェックする必要があります。
303リダイレクトは、POST
リクエストをGET
リソースにリダイレクトすることを意味します(そうでない場合、クライアントは、新しい場所のリクエストメソッドが元のリソースと同じであると想定します)。
Webアプリケーションの一部としてクライアントをリダイレクトしているが、クライアントが常にWebアプリケーション(たとえば、URLの短縮版)から開始することが予想される場合、302リダイレクトは理にかなっているようです。 303リダイレクトは、クライアントからPOST
データを受信していて(フォームの送信など)、GET
ではなくPOST
を使用して取得する新しいWebページにリダイレクトする場合(たとえば、標準のページリクエスト)に使用します。
ただし、ステータスコードの定義からこのメモを参照してください。ほとんどのクライアントは、302または303のどちらでも同じことを行います。
Note: RFC 1945 and RFC 2068 specify that the client is not allowed
to change the method on the redirected request. However, most
existing user agent implementations treat 302 as if it were a 303
response, performing a GET on the Location field-value regardless
of the original request method. The status codes 303 and 307 have
been added for servers that wish to make unambiguously clear which
kind of reaction is expected of the client.
現在、4つの異なるリダイレクトタイプがあります。当初は2つしかありませんでしたが、ほとんどのクライアントは302リダイレクトを誤って実装したため、302を受信したときの2つの異なる可能な動作の違いを明確にするために、さらに2つ追加されました。
あなたがリンクしたRFCは、302リダイレクトに関するセクションでこれを述べています:
Note: RFC 1945 and RFC 2068 specify that the client is not allowed to change the method on the redirected request. However, most existing user agent implementations treat 302 as if it were a 303 response, performing a GET on the Location field-value regardless of the original request method. The status codes 303 and 307 have been added for servers that wish to make unambiguously clear which kind of reaction is expected of the client.
古いクライアントは303リダイレクトを理解できない場合があります。 HTTP/1.1要求を行うものはすべて、303応答を理解する必要があります。
300と305の応答をリダイレクトと見なすことができます。これは、6つの異なるタイプがあることを意味します。
使用されるリダイレクトタイプ(301、302、303 ...)は、検索エンジンがコンテンツをインデックス化してランク付けする方法に大きな影響を与えます。一部のスパイダーは、一時的にリダイレクトされたコンテンツのインデックス作成を拒否することさえあります。詳細は、さまざまなSEO資料に記載されています...