0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

HTTPのリダイレクト関係のステータスコードについて整理する

Posted at

HTTPでリダイレクトさせるための応答ステータスコードにはたくさん種類がある。適切な使い分けができるように整理する。

結論から言うとリダイレクト関係のステータスコードは以下のように2つの軸のマトリクスとして整理できる。

元のメソッドを維持する GETメソッドに変更する メソッドの変更をするかどうか曖昧
恒久的 308 Permanent Redirect 301 Moved Permanently
一時的 307 Temporary Redirect 303 See Other 302 Found

以下では縦と横それぞれの軸について解説する。

恒久的か一時的か

恒久的なリダイレクトは将来の同じURLに対するリクエストを、そのURLへのリクエストをスキップしてリダイレクト先URLに直接リクエストを送る可能性がある。一方で一時的なリダイレクトはそのようなことはせず、毎回元のURLにアクセスしてからその応答をみて挙動を決める。よって恒久的リダイレクトはサイトの改修などでページのURLが変わった場合に、一時的リダイレクトはフォーム等のPOST後に投稿完了画面へ移動させる場合等に使う。

メソッドの変更をするかしないか

リダイレクト先のURLにリクエストを送るときに元のリクエストのメソッドを維持するものと、元のリクエストのメソッドを無視してGETでリクエストするもの、そしてどちらになるか曖昧なものがある。元のリクエストのメソッドを無視するものは、例えばフォームの投稿をPOSTメソッドでしたときに投稿完了画面へのリダイレクトをGETで行って欲しいと言う場合に使う。曖昧なものはHTTP規格上は変更しないことになっているがこれに準拠せずGETでリダイレクト先にアクセスするエージェントが存在するというもの。よって曖昧なものは元がGETリクエストである場合以外使うべきではない。

あとがき

メソッドの変更をするかどうか曖昧な301 Moved Permanently302 Foundはもう使わないとしてしまって良い気がする。個人的にはこれからは挙動が明確な303 See Other307 Temporary Redirect308 Permanent Redirectのみを使うようにしたい。恒久的でGETメソッドに変更する場合がないが、そもそもそのような挙動が求められる状況が思いつかないので存在しないってことかな。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?