このワダイ、3行で
- 「404 Not Found」は、そのURLで現在表示できる情報をサーバーが見つけられない、または存在を明かさないことを示します。
- ページが別のURLへ移った場合や、閲覧を拒むページの存在を隠す場合にも404が使われるため、「永久に消えた」とは限りません。
- 利用できない状態が永久的と判断される場合には、「410 Gone」という別のステータスコードが用意されています。
リンクを開いた先に表示される「404 Not Found」。見つからないのだから、そのページは削除されたのだろう──そう考えて、すぐに画面を閉じたことはないでしょうか。
ところが、404は「ページが永久に消えた」という意味ではありません。ページの内容が別のURLに残っていることもあれば、サーバーがその存在を隠すために404を返していることさえあります。
では、404は何を伝えているのでしょうか。現在のHTTP仕様とウェブの初期資料から、見慣れた3桁の正体を確かめます。
404 Not Foundが意味するのは「このURLでは見つからない」

ウェブブラウザーでページを開くと、ブラウザーはそのURLを管理するサーバーへ情報を送るように求めます。サーバーは要求に応じて、ページの内容とともに処理結果を示す3桁の「HTTPステータスコード」を返します。
正常に表示できたときの代表が「200 OK」、転送先があるときに使われるのが「301 Moved Permanently」などです。普段はブラウザーが裏側で処理するため、数字を意識することはほとんどありません。処理できなかったとき、エラーページに数字が書かれていれば利用者にも見えるようになります。
現行仕様のRFC 9110は、404について「対象のリソースについて現在の表現を見つけられない、または存在することを明かしたくない」場合の応答と定めています。少し難しい表現ですが、利用者の側から見れば、「いま指定されたURLから、求めた内容を受け取れない」という意味です。
ここで重要なのが、404だけでは、その状態が一時的なのか永久的なのか分からないことです。仕様にも、404は両者を区別しないと明記されています。
404でもページが消えたとは限らない3つのケース

1. 内容が別のURLへ移っている
サイトの整理やリニューアルでURLが変わっても、古いURLから新しいURLへの転送が設定されていなければ、古いほうには404が表示されます。この場合、以前と同じ内容や後継ページが別の場所に残っている可能性があります。
正しく転送が設定されていれば、恒久的な移転には「301 Moved Permanently」などが返されます。しかし、サイト側が転送を設定していない、外部サイトのリンクだけが古いまま残っているといった理由で、利用者には移転と削除の区別がつきません。
2. 存在を隠すために404を返している
アクセスを禁止されたページには「403 Forbidden」というコードがあります。それでも現行仕様では、サーバーが対象の存在を明かしたくない場合、403の代わりに404を返してよいとされています。
たとえば、関係者だけが使う管理画面について、権限のない相手に「ページはあるが閲覧禁止です」と答えると、そのURLに何かが存在すると教えることになります。404を返せば、外部からは「存在しない」のか「存在を隠している」のか判断できません。
3. 後から同じURLで戻る可能性がある
404は永久的な消失を宣言するコードではありません。いったん公開を止めたページが、修正後に同じURLで再公開されることもあります。404を見た時点で内容を取得できないことは確かですが、そのURLが今後もずっと使えないとは限らないのです。
つまり、タイトルの疑問への答えは「本当。ただし、そのURLで現在表示できないことは確か」となります。
401、402、403は何を意味する?404前後のコード
404だけが特別な形式なのではありません。HTTPステータスコードは、最初の数字で大きな分類が決まります。「4」から始まるものは、要求をそのまま処理できない「4xx」のグループです。
404の前後にある代表的なコードも、簡単に見ておきましょう。
| コード | 名前 | 大まかな意味 |
|---|---|---|
| 400 | Bad Request | 要求の形式などに問題があり、サーバーが処理できない |
| 401 | Unauthorized | 有効な認証情報がなく、認証が必要 |
| 402 | Payment Required | 将来の利用のために予約されている |
| 403 | Forbidden | 要求は理解したが、サーバーが処理を拒否している |
| 404 | Not Found | 現在の内容を見つけられない、または存在を明かさない |
| 405 | Method Not Allowed | そのページでは、送られた操作方法を受け付けていない |
| 406 | Not Acceptable | 要求された条件に合う形式で内容を返せない |
| 407 | Proxy Authentication Required | 途中のプロキシサーバーで認証が必要 |
| 408 | Request Timeout | 要求を待つ時間が長くなり、接続を終了した |
| 409 | Conflict | 現在の状態と要求が衝突して処理できない |
| 410 | Gone | 対象が利用できず、その状態が永久的と思われる |
なかでも401は、英語では「権限がない」と読める名前ですが、実際にはログイン情報などの認証が必要な場面で使われます。権限がないため処理を拒む403とは役割が異なります。
「支払いが必要」と読める402は、現行仕様でも将来のための予約という位置づけです。名前だけが先に知られ、標準的な使い方はまだ定められていません。
永久的な消失を伝える「410 Gone」

404が一時的か永久的かを区別しないのに対し、対象が利用できない状態をサーバー側が永久的と判断している場合には「410 Gone」が用意されています。
404を見たことがあっても、410という表示には覚えがない人が多いかもしれません。一般的なサイトでは、削除されたURLもまとめて404として処理されることがあるためです。WordPressでも、削除した投稿を410にするには専用プラグインやサーバー側の設定など、通常とは別の対応が必要になります。
また、Googleは、代わりになるページがなく、内容がもう存在しないURLには404または410を返すよう案内しています。検索結果から外すという目的では両方が使えるため、サイト運営者が必ず410を選ばなければならないわけではありません。
410は規格上きちんと存在します。それでも、少なくとも削除後のURLを標準で404として扱うWordPressでは、追加対応をしない限り410という文字を目にしなくても不思議ではありません。404の意味を調べると、その隣に「永久的な消失」を伝える、見慣れない番号が隠れていました。
「404」という数字にまつわる説
ここまでが404の意味の話です。ここからは少し寄り道して、「なぜこの数字なのか」にまつわる説も見ておきましょう。

404の由来としてよく語られるのが、ウェブが生まれた欧州原子核研究機構(CERN)の「404号室」に最初のサーバーが置かれていた、という説です。ファイルを見つけられないときに404号室へ問い合わせたことがエラー名になった、という形で紹介されることもあります。
しかし、ウェブを考案したTim Berners-Lee氏は2014年のオンライン質問企画で、この説を否定しています。初期のウェブ開発に協力したRobert Cailliau氏も、WIREDの取材に対し、404はCERNの部屋や物理的な場所とは結びついていないと説明しました。404号室説は、本人たちの証言と一致しません。
一方、HTTP/1.0の仕様書から確認できるのは、先頭の数字が応答の分類を表すことです。「4」は要求を処理できない4xxの分類を示しますが、残り2桁には、それ以上の分類上の役割はないと明記されています。
では、なぜNot Foundに「04」が割り当てられたのでしょうか。今回確認した公式仕様と開発者の証言には、04という数字自体に込められた特別な意味は記録されていません。確認できる範囲では、404は部屋番号ではなく、HTTPのエラー番号体系の中でNot Foundに割り当てられた番号と考えるのが妥当です。
404が出たときに試せること
404を見ても、探していた情報まで消えたと決まったわけではありません。次の順番で探すと、移転先が見つかることがあります。
404が出たときの確認手順
- URLの入力間違いや、末尾まで正しくコピーできているかを確認する
- サイトのトップページやサイト内検索から、同じ題名を探す
- 検索エンジンで記事名や特徴的な文章を検索する
それでも見つからなければ、ページが削除された、公開を一時的に止めている、閲覧できる相手を限定している、といった可能性が残ります。404だけを見て、そのどれか一つに断定することはできません。
404は「ない」と断言する数字ではない
「404 Not Found」が伝えているのは、指定されたURLから現在の内容を受け取れないことです。別のURLへ移っているのか、一時的に見つからないのか、存在を隠しているのか、永久に削除されたのかまでは教えてくれません。
永久的な消失を伝える410 Goneが別に存在することを知ると、404の曖昧さがよく分かります。毎日のように見かけるエラー画面は、ページの最期を告げる墓標ではなく、サーバーが「ここではいま渡せません」とだけ答えている画面だったのです。


コメント