1. ホーム
  2. http

[解決済み] HTTPリダイレクトコードの違い

2022-04-26 01:26:01

質問

様々なHTTP 3XXリダイレクトコードの違いがよくわかりません。 はい、仕様書は読みましたが、ここでは標準と実際の実践の間に食い違いがあるようです。

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

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

しかし、この場合 302303 との違いや、なぜこの2つが本当に違うのか? 301 . どうやら 302 は、もともと 一時的な リダイレクト、(例えば 307 のように扱われましたが、実際にはほとんどのブラウザが 303 . しかし 303301 ? は 301 は、リダイレクトを意味するものと思われます。 より 永久に?

解決方法は?

  • 301 : 恒久的なリダイレクト。 このリソースへの以降のリクエストを行うクライアントは、新しい URI を使用する必要があります。 クライアントは ない は、POST/PUT/DELETE リクエストに対して自動的にリダイレクトに従います。
  • 302 : 未定義の理由のためリダイレクト。 このリソースへの以降のリクエストを行うクライアントは ない は新しい URI を使用します。 クライアントは ない は、POST/PUT/DELETE リクエストに対して自動的にリダイレクトに従います。
  • 303 : 未定義の理由によるリダイレクト。 典型的には、「操作が完了したので、他の場所で続けてください」です。 このリソースに以降のリクエストを行うクライアントは ではない は新しいURIを使用します。 クライアント が必要です。 POST/PUT/DELETE リクエストの場合はリダイレクトに従いますが フォローアップのリクエストにはGETを使用する .
  • 307 : 一時的なリダイレクトです。 リソースは後の時点でこの場所に戻る可能性があります。 このリソースへの後続のリクエストを行うクライアントは、古い URI を使用する必要があります。 クライアントは ない は、POST/PUT/DELETE リクエストに対して自動的にリダイレクトに従います。

個人的には、選択できるのであれば302を避けることをお勧めします。 多くのクライアントは、302に遭遇しても仕様に従わないからです。 一時的なリダイレクトには、GET 以外のリクエストでどのような動作をさせたいかによって、303 か 307 のどちらかを使うべきでしょう。 POST/PUT/DELETE の代替動作が必要でない限り、303 よりも 307 を優先してください。