2017年1月9日月曜日

302 Moved Temporarily

ウェブサーバを運用していると、
ある特定のURLにアクセスされた時に
別のURLに自動的に飛ばしたいことが多々ありますが、
そんな時によく使うのがHTTPのレスポンスコードの
"301 Moved Permanently"だったりします。
PHPで書くなら
<?
header("HTTP/1.1 301 Moved Permanently");
header("Location: <飛び先URL>");
?>
のようにすることで実現できます。
ただ301だとプロキシサーバやブラウザにキャッシュが残って、
先の"飛び先URL"を変更しても環境によっては
それが反映されるのに時間がかかってしまいます。
飛び先URLが定期的に変わるようなケースだとそれでは困るわけで、
そういう場合は"302 Moved Temporarily"を使います。
301が恒久的な移動を意味していて情報がキャッシュされるのに対し、
302は一時的な移動ということでキャッシュされません。
ただし動作はプロキシやブラウザに依存します。

そんな302ですが、最近調べたところ仕様が変更されているんですね。
本来302はウェブサーバが一時的に使えなくなるとき、
サービス継続のための別サーバへのリダイレクトを目的としていますが、
私のように別の用途で使ってしまう輩がたくさんいたということで、
"302 Found"に変更されていました。
そしてそんなふとどきな輩用には"303 See Other"が作られ、
本体の302の代わりとして"307 Temporary Redirect"が新設されました。
302は過去との互換性で残っているみたいです。

ところでこの仕様、1999年発行のRFC2616で既にそうなっていて、
不覚にもまったく知りませんでした。
まあRFC2616自体既に2014年にRFC7230〜7239に取って代わられて
廃盤になっているのですが。
昨日の常識は今日の常識ではないかもしれないという
いい教訓になりました。

0 件のコメント:

コメントを投稿