302と303の例


回答:


35

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

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
明確だが間違っている。303リダイレクトは永続的ではありません。RFCは、「303応答をキャッシュしてはいけません」と述べています。ここで指定した説明は、301リダイレクトに一致します。
ラダダダダ

2
カルパ。私は301と303を逆方向に持っていました。答えを更新しました。
ラースク

現在308がある
ミランダ

303がPOSTをGET(完全停止)にリダイレクトするのに「意味がある」と示唆するのは少し誤解を招くと思います。仕様は、303が最初に要求されたメソッドを介したリソースの表現の可用性に関することを示唆しています。たとえば、認証されたユーザーのみが使用できる大きな権利で保護された画像がある場合、303を使用して認証されていないユーザーを小さな画像にリダイレクトします。そのような場合に使用される要求メソッドは無関係です。
beaudet

RFCは、「このメソッドは主に、POSTでアクティブ化されたスクリプトの出力がユーザーエージェントを選択されたリソースにリダイレクトできるようにするために存在します」と述べています。そして「リクエストへの応答は異なるURIの下で見つけることができ、そのリソースでGETメソッドを使用して取得する必要があります」。これは私が言ったものとほとんど一致していると思います(何年も前のことですが)。
larsks

15

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つの異なるタイプがあることを意味します。


0

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.