HTTPのステータスコードに何を出すべきか

URLが変わったのなら "301 Moved Permanently" を返すべきだ。

アクセスされたページを削除してしまったのなら仕方ありませんが、URLが変わっただけならなんとか探し当てていただきたいもの。

http://caramel-tea.com/2007/03/404error/

で、どさにっきによれば、削除されたときは "410 Gone" を返すべきとのこと。

404 Blog Not Found:誤った404エラーページをつくるただ1つの方法のコメントに404だとリダイレクトするサイト(lolipopなど)があって困るという話があった。同感。上位ディレクトリにアクセスしたいときとかに不便だ。そもそもこういう場合は "301 Moved Permanently" か "302 Moved Temporarily" を出した上で、404を返しているのだろうか。それもすごく変。

やってみたら、Location付きで "302 Found" が返ってきた。"302 Found" って何? 302=Moved Temporarily ではなかったの?と思ったらRFC 2068和訳)はRFC 2616解説)でupdateされていた模様。ふーん。

studyinghttp.net - このウェブサイトは販売用です! - 解説 仕様書 利用 技術 である 手法 日本語訳 プログラミング リソースおよび情報の302周辺を読むと、POST後のリダイレクトは "303 See Other" を使うのが正しそうだ。"302 Moved Temporarily" は "307 Temporary Redirect"に移された。"302 Moved Temporarily" が正しく使われないので(POST後のリダイレクトに使われている)、本来の意味での302を307としてコピーしたようだ。あと、ディレクトリにアクセスするときに末尾にスラッシュが付いてない場合は "301 Moved Permanently"(とLocation)が返されているらしい。リダイレクトで無駄な通信が発生しているとは聞いていたがそうだったのか。

E-Commerceがらみでhttp://neta.ywcafe.net/000552.htmlという話もあった。ついでに404 Blog Not Found:200 Blog Not Foundというのも見つけた。たしかにCGIでは最初に "Content-type:text/html\n\n" と出力していたのもよく覚えている。懐かしい。"Location: どこそこ\n\n" というのもあった。