web-dev-qa-db-ja.com

302と303の例

302応答と303応答の違いは何ですか?

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

  • 10.3.3 302が見つかりました
  • 10.3.4 303他を参照

これらは交換可能ですか、それともなぜ一方が他方に使用されるのでしょうか? 1つが使用される(そしてもう1つは使用されない)ユースケースを教えていただけませんか?

24
David542

リンク先のページの説明は、意図した目的をかなり説明しているようです。

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.
37
larsks

現在、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.
  1. 301リダイレクトは永続的なリダイレクトです。これはキャッシュ可能であり、このURLのブックマークは、新しいURLを指すように更新する必要があります。
  2. 302リダイレクトは一時的なリダイレクトです。これはデフォルトではキャッシュできません。毎回再リクエストする必要があります(ただし、ヘッダーをキャッシュすることでオーバーライドできます)。フォローアップリクエストでは、元のリクエストと同じメソッド(POST、GET、CONNECT、PUT、DELETEなど)を使用し、GETおよびHEADリクエスト以外の場合、クライアントはリクエストを行う前にユーザーにプロンプ​​トを表示します。これは、クライアントが間違った部分であり、ほとんどのクライアントは、元のメソッドに関係なく、フォローアップリクエストのメソッドをGETに変更します。
  3. 303リダイレクトは302と同じですが、フォローアップ要求が明示的にGET要求に変更され、確認は必要ありません。
  4. 307リダイレクトは302と同じですが、フォローアップリクエストが元のリクエストと明示的に同じになり、GETおよびHEAD以外のリクエストメソッドについてはユーザーから確認を取得する必要がある点が異なります。

古いクライアントは303リダイレクトを理解できない場合があります。 HTTP/1.1要求を行うものはすべて、303応答を理解する必要があります。

300と305の応答をリダイレクトと見なすことができます。これは、6つの異なるタイプがあることを意味します。

15
Ladadadada

使用されるリダイレクトタイプ(301、302、303 ...)は、検索エンジンがコンテンツをインデックス化してランク付けする方法に大きな影響を与えます。一部のスパイダーは、一時的にリダイレクトされたコンテンツのインデックス作成を拒否することさえあります。詳細は、さまざまなSEO資料に記載されています...

0
rackandboneman