(他に忘れられがちなもの以外|意外)に忘れられがちなのが、これ。

ステータス200なのに「その商品はありません」
エンジニア以外の人間が読むと、「ページがなければ404エラー。そんなのあたりまえだろ。」で終わってしまいかねない。 ここでは、「404エラーページを見せろ」ではなく「httpヘッダーで404を返せ」と言っているのがミソだ。
「ステータスコードをいじるのは難しい」といった言い訳をするエンジニアもいるが、それはうそだ。

実はCGIなら、最初の行に"Status: ###"と書き込むだけでWeb Serverがよきに計らってくれる。だから、実はこのことは言語の仕様ですらなく、CGIの仕様だ。以下のShell Scirptは立派なCGIだ。

#!/bin/sh
echo "Status: 404 Not Found"
echo "Content-Type: text/plain"
echo ""
echo "The requested URI $REQUEST_URI not found on this server $SERVER_NAME."

PerlのCGI.pmであれば、

my $q = CGI->new;
# ....
print $q->header(-status => "404 Not Found");

と簡潔に書ける。

ちなみに、Status Codeの後ろは、任意の文字列でいいので、

$q->header(-status => "404 Blog Not Found");

とやってももちろんHTTP準拠である。

Dan the Man with Too Many Pages Not Found