HTTP 301と308のステータスコードの違いは何ですか?


137

HTTP 301308ステータスコードの違いは何ですか?

  • 301 (恒久的に移動):これ以降のすべてのリクエストは、指定されたURIに送信する必要があります。

  • 308 (永続的なリダイレクト):リクエストと今後のすべてのリクエストは、別のURIを使用して繰り返す必要があります。

彼らは似ているようです。


tools.ietf.org/html/rfc2616およびtools.ietf.org/html/rfc6585にはコード308がないため、この非標準コードの発明者に質問を送信する必要があります。
KonstantinL

4
RFC 7538の仕様があるため、本当のHTTPコードです
Alexander Drobyshevsky

2
そうですね、tools.ietf.org / html / rfc7538:注:このステータスコードは301と似ていますが、リクエストメソッドをPOSTからGETに変更できない点が異なります。
KonstantinL

4
RFC 2616を参照として使用しないでください。RFC 7230-35により廃止されました。
カシオモリン2017

回答:


257

の概要301302および307

RFC 7231、セマンティクス及びHTTP / 1.1プロトコルのコンテンツに対する現在の参照、定義301(恒久的に移動)と302要求方法から変更されることを可能にする(実測値)ステータスコードPOSTGET。この仕様307では、リクエストメソッドをからに変更できない(一時的なリダイレクト)ステータスコードも定義されPOSTていGETます。

以下の詳細をご覧ください。

6.4.2。301永久に移動

301(恒久的に移動)ステータスコードターゲットリソースが新しい永続URIが割り当てられており、このリソースへの将来の参照が封入されたURIのいずれかを使用するべきであることを示しています。[...]

注:歴史的な理由により、ユーザーエージェントは後続のリクエストのためにリクエストメソッドをからPOSTに変更する場合がありますGET。この動作が望ましくない場合は、307代わりに(一時的なリダイレクト)ステータスコードを使用できます。

6.4.3。302見つかりました

302(実測値)ステータスコードは、ターゲット・リソースが異なるURIの下に一時的に存在することを示しています。リダイレクトはときどき変更される可能性があるため、クライアントは今後のリクエストに引き続き有効なリクエストURIを使用する必要があります。[...]

注:歴史的な理由により、ユーザーエージェントは後続のリクエストのためにリクエストメソッドをからPOSTに変更する場合がありますGET。この動作が望ましくない場合は、307代わりに(一時的なリダイレクト)ステータスコードを使用できます。

6.4.7。307一時的なリダイレクト

307(一時的なリダイレクト)状態コードは、それがそのURIへの自動リダイレクトを行った場合、一時的に異なるURIの下に、ターゲットリソースが存在するとユーザエージェントMUSTは要求方式を変更しないことを示しています。リダイレクションは時間の経過とともに変化する可能性があるため、クライアントは将来のリクエストに元の有効なリクエストURIを引き続き使用する必要があります。[...]

注:このステータスコードは302(Found)に似ていますが、リクエストメソッドをからPOSTに変更できない点が異なりGETます。この仕様では、301(永久に移動)に相当するものは定義されていません(ただし、RFC 7238では、308 この目的のためにステータスコード(永続的なリダイレクト)が定義されています)。

の必要性 308

RFC 7238は、定義するために作成された308と同様である(パーマネントリダイレクト)ステータスコード301(永久移動)が、要求の方法から変更されることを可能にしないPOSTとしますGET

308ステータスコードは、現在によって定義されるRFC 7538(廃止RFC 7238に)。

3. 308永久リダイレクト

308(パーマネントリダイレクト)状態コードは、ターゲット・リソースが新しい永続URIが割り当てられており、このリソースへの将来の参照が封入されたURIのいずれかを使用するべきであることを示しています。リンク編集機能を持つクライアントは、有効なリクエストURIへの参照を、可能な場合はサーバーから送信される1つ以上の新しい参照に自動的に再リンクする必要があります。[...]

注:このステータスコードは301、リクエストメソッドをからPOSTに変更できないことを除いて、(永久に移動)に似てい GETます。

Seには次のものがあります。

                                                             +-----------+-----------+
                                                             | Permanent | Temporary |
+------------------------------------------------------------+-----------+-----------+
| Allows changing the request method from POST to GET        | 301       | 302       |
+------------------------------------------------------------+-----------+-----------+
| Doesn't allow changing the request method from POST to GET | 308       | 307       |
+------------------------------------------------------------+-----------+-----------+

最も適切なステータスコードの選択

Michael Kropatは、各状況に最適なステータスコードを決定するのに役立つ一連の決定チャートをまとめました。2xxおよび3xxステータスコードについては、以下を参照してください。

2xxまたは3xxステータスコードの選択


3
質問は、特に301と308の間destinctionについてだったことを考えると、あなたは上のいくつかのより詳細な説明を与えることができる:「要求方法から変更することができていないPOSTGET?それは、投稿されたフォームを処理できないが、新しい新しいフォームを処理し、次のリクエストで投稿できることを意味しますか?
R. Schreurs

1
このドラフト仕様(tools.ietf.org/id/draft-hunt-http-rest-redirect-00.html)は、ReSTfulサービスがGETに対しても308を使用する必要があることを示唆しています。「HTTPリダイレクトコード301-306は、クライアントが実際にはユーザーエージェントであることをサービスプロバイダーが認識していない限り、使用しないでください。」ただし、これはドラフトにすぎません。それがいつ受け入れられるかはわかりません。
Bruce Adams、

1
この投稿は、-決定的なガイド・ツー・取得-VS-ポスト、なぜ許可明確化POST(安全な)要求をすることに変更するにGETURLに追加することで渡されるデータに危険な( -とURLを保存することができます-パスワードを含む)リクエストはセキュリティ上の問題となる可能性があり、変更しても安全であることがわかっている場合を除き、通常は回避する必要があります。最近では、一般的にサポートされており、301、302よりも307、308を使用することが推奨されています。ただし、確認する必要があります。
SherylHohman

1
ニーモニック308は横向きの無限大のようなものなので、永続的なリダイレクトであり、リクエストのメソッドも変更しない-永続的な固定リクエストタイプでもあります。その後、307ある1一時場所に永続的/キープ要求メソッド(GET / POST)が、リダイレクト-以下のステップ:7 -は「左折」または一時迂回、および7のように見えるが、kに見ても似ているので、「続ける」をリクエストメソッド。
SherylHohman

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