HTTPリダイレクトについて調査した

HTTPのリダイレクトには,大きく分けて次の二つ存在する.

一般的に用いられるリダイレクトのステータスコードは 301302 である(個人的な考えですが). しかし,他にもいくつかリダイレクトのステータスコードは存在する.

また,似たような意味を持つステータスコードもあるので,整理するために少し調査した.

今回対象とするリダイレクトのステータスコード

今回は,次の4つを対象とする.

それぞれのステータスコードについて,RFCを参考に概要を以下に示す. 308以外はRFC 7231,308はRFC 7238で定義されている.

301 Moved Permanently

302 Found

307 Temporary Redirect

308 Permanent Redirect

挙動の確認

それぞれのステータスコードに対する挙動を確認するため,簡単なサーバプログラムをGoで作成し,そのサーバに4種類のクライアントで接続した. 作成したサーバプログラムは mas9612/http-redirect-test に置いている.

用いたクライアント

上記それぞれのクライアントから,GETとPOST2つのメソッドで作成したサーバに接続した. 結果を次の表に示す.

Method GET

client 301 302 307 308
curl GET GET GET GET
Safari GET GET GET GET
Chrome GET GET GET GET
Firefox GET GET GET GET

Method POST

client 301 302 307 308
curl POST POST POST POST
Safari GET GET POST POST
Chrome GET GET POST POST
Firefox GET GET POST POST

実験結果より,curl以外のクライアントは,POSTリクエストの応答結果が301と302の時,リダイレクト先へのリクエストメソッドをGETに変更していることがわかった. また,RFCの定義どおり,307と308はきちんとリクエストメソッドが維持されていることが確認できた.

References