LoginSignup
19
16

More than 1 year has passed since last update.

HTTPのリダイレクト時のHTTPステータスコードまとめ

Last updated at Posted at 2019-08-12

前書き

HTTPリクエストのリダイレクトの挙動とhttpのステータスコードの意味、振る舞いについて、個人的に気になったところなどを調べてまとめています。

要約

コード 情報 意味 UAによるメソッドの変更 RFC
301 Moved Permanently 恒久的に移動した 変更される場合がある 1945, 2068, 2616
302 Found 発見した 変更される場合がある 1945, 2068, 2616
303 See Other 他を参照せよ GETに変換されることを期待 2616,7231
307 Temporary Redirect 一時的リダイレクト 変更してはならない 2616,7231
308 Permanent Redirect 恒久的リダイレクト 変更してはならない 7238,7538
3xx.png 出典: https://postd.cc/choosing-an-http-status-code/

301 Moved Permanently

リクエストされたリソースが Location ヘッダーで示された URL に完全に移動したことを示す。ブラウザーはこのページにリダイレクトし、検索エンジンはリソースへのリンクを更新する。

リダイレクトが行われるとき、仕様書ではメソッド (と本文) を変更しないよう要求していたが、歴史的な理由により、ユーザーエージェントはリクエストを変更する場合がある。

すべてのユーザーエージェントが従っている訳ではないので、301のコードは GET または HEAD メソッドのみに使用し、POSTメソッドでは代わりに 308 Permanent Redirect (明確にメソッドの変更が禁止)を使用することが推奨

302 Found

リクエストされたリソースが一時的に Location で示された URL へ移動したことを示す。ブラウザーはこのページにリダイレクトしますが、検索エンジンはリソースへのリンクを更新しない。

リダイレクトが行われるとき、仕様書ではメソッド (と本文) を変更しないよう要求していたが、歴史的な理由により、ユーザーエージェントはリクエストを変更する場合がある。

すべてのユーザーエージェントが従っている訳ではないので、302のコードは GET または HEAD メソッドのみに使用し、POSTメソッドでは代わりに 307 Temporary Redirect (明確にメソッドの変更が禁止)を使用することが推奨。

303 See Other

オリジンサーバーがHTTP経由でサーバーによって転送できるターゲットリソースの表現を持っていないことを示す。

このステータスコードはロケーションヘッダーとともに使用する必要があり、サーバーがPOSTまたはその他のべき等でない要求に303 See Other応答とロケーションヘッダーの値で応答する場合、クライアントはGETメソッドを使用してロケーションヘッダーに記載されているリソースを取得することが期待される。

用途としては、PUT メソッドへのレスポンスで、アップロードされたリソースではないところで「XYZ のアップロードに成功しました」のような確認メッセージを表示したい場合や、アップロード進捗ページのような別なページであることを示す場合に便利。

307 Temporary Redirect

リクエストされたリソースが一時的に Location で示された URL へ移動したことを示す。元のリクエストのメソッドと本文は、リダイレクトされたリクエストを行う際に再利用されることを期待する。

307 と 302 の違いは、 307 はリダイレクトされたリクエストが行われるときに、メソッドと本文が変更されないことが保証されること。 これをもう少し噛み砕くと、302 では、一部の古いクライアントは不正にメソッドを GET に変更するものがあるが、307 では、変更してはならない。

ただし、Google chromeなどでは 307 が Internal Redirect としてHSTSのリダイレクト時に使われている。

308 Permanent Redirect

クエストされたリソースが Location ヘッダーで示された URL へ完全に移動したことを示す。ブラウザーはこのページにリダイレクトし、検索エンジンはリソースへのリンクを更新する。

308 と 301 の違いは、 308 はリダイレクトされたリクエストが行われるときに、メソッドと本文が変更されないことが保証されること。 これをもう少し噛み砕くと、301 では、一部の古いクライアントは不正にメソッドを GET に変更するものがあるが、308 では、変更してはならない。

ただし、ウェブアプリケーションによっては、 308 Permanent Redirect を標準外かつ他の目的に使用していることがある。例えば、 Google Drive はアップロードが不完全に停止したことを表すために、308 Resume Incomplete レスポンスを使用している。

参考

https://tools.ietf.org/html/rfc1945
https://tools.ietf.org/html/rfc2068
https://tools.ietf.org/html/rfc2616
https://tools.ietf.org/html/rfc7231
https://tools.ietf.org/html/rfc7238
https://tools.ietf.org/html/rfc7538
https://postd.cc/choosing-an-http-status-code/
https://www.techscore.com/blog/2016/01/23/http-redirection-status-code/
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/301
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/302
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/303
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/307
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/308

19
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
16