読者です 読者をやめる 読者になる 読者になる

mixi engineer blog

ミクシィ・グループで、実際に開発に携わっているエンジニア達が執筆している公式ブログです。様々なサービスの開発や運用を行っていく際に得た技術情報から採用情報まで、有益な情報を幅広く取り扱っています。

404 Not Found

mixi neta

あなたがいまご覧になっているこのWeb文書は、httpという通信プロトコルにのっとってシステムが動き、お手元に届いています。

httpの上でURLを指定すると文書(データ)が返ってきます。
指定したURLにデータがなかった場合、「残念、それはありませんよ〜」という状態がhttpにのっとって返ってきます。この状態(ステータス)を示す番号(ステータスコード)が, http status codeの404 Not Foundです。

存在しないURLが要求されたとき、Webサーバは標準ではこのように、404のステータスコードと共に、単純に「それはありません」という素っ気ないWeb文書を返します。

Not Found
The requested URL /arimasen was not found on this server.

plain 404 error

ご覧のように、素っ気ないです。閲覧している人の立場からすると、じゃあどうしたらいいのかわかりません。ですので、改めて検索機能やコンテンツ一覧も併せて示し、閲覧者の便宜をはかり、機会損失を減らす工夫をしているWebサイトが多いです。

このmixi Engineers' Blogの場合は、サイトのトップページ (http://alpha.mixi.co.jp/) に行っていただければ、最新の数記事の見出しやエントリ一覧、検索機能、キーワードによるタグ一覧、月ごとの過去記事アーカイブ一覧などをご利用いただけます。
もし「あるべきものを見たかったのにこの記事が表示されている」場合は、トップページ (http://alpha.mixi.co.jp/) にアクセスいただければ、ご希望の情報に行き当たるかもしれません。ご不便おかけしてすみません。


このように、404 Not Found状態になった場合どんなWeb文書を返すべきかは、Webサーバ側で設定できることがほとんどです。このブログサイトで用いているWebサーバソフトウェアはapacheなので、このような設定を施しています。

ErrorDocument 404 /2013/11668/

ここで /2013/11668/ は、いまご覧になっているこの記事の本来のパスです。 このように設定することで、http://alpha.mixi.co.jp/arimasen のような存在しないURLへのアクセスに対し、

「そのURLに対応する文書はありません。なので、指定されたこの案内文書を添えて、非正常なWeb文書としてお返しします(結論:404エラー)」

を配信することができます。

この設定でうっかりやってしまいがちなのが、

ErrorDocument 404 http://alpha.mixi.co.jp/2013/11668/

のように、FQDNなども含めた完全URLを指定してしまうこと。
このように指定してしまうと、apacheの挙動がかわります。

「そのURLに対応する文書はありません(404)。なので、指定されたこの案内文書 http://alpha.mixi.co.jp/2013/11668/ にリダイレクト誘導します(302)」

するとブラウザは

(じゃあ、俺 http://alpha.mixi.co.jp/2013/11668/ にアクセスしなおすわ……)

その結果apacheは

「alpha.mixi.co.jpにある/2013/11668/という文書を要求されました。ハイ、あります。問題ない。お送りしますね(結論:200 OK)」

情報を閲覧したい人に対する機会損失フォローとしては問題ありませんし、本当にこの挙動を意図しているのであれば構いませんが、

「誤った要求に対してきちんとエラーを表明する」
「エラーが表明されたので、たとえば検索エンジンが『ああ、それは無いんだな』と認識しなおす」

という本来あるべきWebの仕組みとしては、いまひとつよろしくありません。


というわけで、いまこのページが表示されている理由は、

  1. このブログ記事を、正しいURL (http://alpha.mixi.co.jp/2013/11668/) を指定して要求(リクエスト)し、結果としてこの記事が正常 (http status code: 200 OK)に表示された。
  2. このブログサイトに、存在しないURL (たとえば http://alpha.mixi.co.jp/arimasen) を要求した結果、エラーステータスを伴ってこの記事が表示されている。 なぜならalpha.mixi.co.jpというWebサーバでは404 Not Foundの際は/2013/11668/の内容をエラー文書として表示するよう設定されているから。

の、どちらかです。


404エラー表示に凝っているサイトはいくつもあります。

ひときわ世界的に有名なのがフランスの自動車メーカーPeugeotのサイトで、404と書かれた自動車が出てきます。プジョーにはむかしPeugeot 404という名車があったので、それにちなんでPeugeot 404の写真を出しているのですね。ずるい。

日本の自動車メーカーですと、1990年代中期の日産自動車のサイトは、404 Not Foundのページに、リロードするごとに違った本社の受付のおねえさんの写真が出てくるような仕掛けを入れていました。404ページをカスタマイズすること自体が目新しかった時代です。(Net|Free|Open)BSDやipv6に多大な貢献をされたかたが関わっていらっしゃったようです。

むかしのmixiでは、404 Not Foundに対応するエラー表示は特に設定されていませんでした。真っ白でした。すみません。2010年3月3日に、以下のエラー表示を出すよう改善がなされました。

mixi.jp 404 error

これからも心地よく便利なmixiを目指して改善改良を進めてまいります。今後ともよろしくお願いいたします。