web-dev-qa-db-ja.com

HTTPリダイレクトコードの違い

さまざまなHTTP 3XXリダイレクトコードの違いは私には明らかではありません。はい、仕様を読みましたが、ここで標準と実際のプラクティスとの間に矛盾があるようです。

301リダイレクトコードは十分明確に見えます。これは、リソースが別のURIに永続的に移動されたことを意味し、今後のリクエストではそのURIを使用する必要があります。

また、307リダイレクトコードも明確に見えます。これは、リダイレクトが一時的であり、今後のリクエストでは元のURIを使用する必要があることを意味します。

しかし、302303の違い、またはどちらが301と本当に異なるのかはわかりません。 302は元々一時リダイレクト(307のような)を目的としていたようですが、実際には、ほとんどのブラウザは303のようにそれを扱いました。しかし、303301の違いは何ですか? 301は、リダイレクトがmore永続的であることを意味するはずですか?

141
Channel72
  • 1:永続的なリダイレクト。このリソースに対して後続のリクエストを行うクライアントは、新しいURIを使用する必要があります。クライアントは、POST/PUT/DELETEリクエストに対してnotリダイレクトに従う必要があります。
  • 2:未定義の理由でリダイレクトします。このリソースに対して後続のリクエストを行うクライアントは、notで新しいURIを使用する必要があります。クライアントは、POST/PUT/DELETEリクエストに対してnotリダイレクトに従う必要があります。
  • :未定義の理由でリダイレクトします。通常、「操作は完了しました。他の場所で続行します。」このリソースに対して後続のリクエストを行うクライアントは、notで新しいURIを使用する必要があります。クライアントべき POST/PUT/DELETEリクエストのリダイレクトに従いますが、フォローアップリクエストにGETを使用
  • 7:一時的なリダイレクト。リソースは後でこの場所に戻る場合があります。このリソースに対して後続のリクエストを行うクライアントは、古いURIを使用する必要があります。クライアントは、POST/PUT/DELETEリクエストに対してnotリダイレクトに従う必要があります。

選択肢がある場合は、個人的に302を避けることをお勧めします。多くのクライアントは、302に遭遇すると仕様に従いません。一時的なリダイレクトの場合は、GET以外の要求で必要な動作のタイプに応じて、303または307を使用する必要があります。 POST/PUT/DELETEで別の動作が必要な場合を除き、307〜303をお勧めします。

127
Bob Aman

3と307の違いはこれです:

:その他を参照してください。リクエストは正しく受信されますが、リダイレクトURLでGETを使用して結果を取得する必要があります。

7:一時的なリダイレクト。リクエスト全体を新しいURLにリダイレクトする必要があります。投稿データはすべて再投稿する必要があります。

2は307の動作を持つように意図されていましたが、ほとんどのブラウザはそれを303の動作として実装していました(どちらも当時は存在しませんでした)。したがって、これら2つの新しいコードは302を置き換えるために導入されました。

1と303の違い:

1:ドキュメントが移動されます。今後のリクエストでは、新しいURLを使用する必要があります。このURLは廃止されました。

注:このコードには注意してください。ブラウザとプロキシは、非常に積極的なキャッシュを適用する傾向があるため、301で返信すると、誰かがそのURLを再訪するのに時間がかかる場合があります。

:要求は正しく受信されます。 PUT要求はすべて処理されます。 結果のドキュメントはリダイレクトURLから取得できます。今後のリクエストは、元のURLに送信する必要があります。

76
GolezTrol