「404 Not Found」でも、ページが消えたとは限らないって本当?

404 Not Foundの画面から、移転・一時停止・非公開の三つの可能性へ矢印が伸びる図解 コラム
当サイトはアフィリエイト広告を利用しています。

このワダイ、3行で

  • 「404 Not Found」は、そのURLで現在表示できる情報をサーバーが見つけられない、または存在を明かさないことを示します。
  • ページが別のURLへ移った場合や、閲覧を拒むページの存在を隠す場合にも404が使われるため、「永久に消えた」とは限りません。
  • 利用できない状態が永久的と判断される場合には、「410 Gone」という別のステータスコードが用意されています。

リンクを開いた先に表示される「404 Not Found」。見つからないのだから、そのページは削除されたのだろう──そう考えて、すぐに画面を閉じたことはないでしょうか。

ところが、404は「ページが永久に消えた」という意味ではありません。ページの内容が別のURLに残っていることもあれば、サーバーがその存在を隠すために404を返していることさえあります。

では、404は何を伝えているのでしょうか。現在のHTTP仕様とウェブの初期資料から、見慣れた3桁の正体を確かめます。

404 Not Foundが意味するのは「このURLでは見つからない」

ブラウザーがサーバーへ要求を送り、サーバーが404を返す流れの図解
ブラウザーが送った要求に、サーバーがステータスコードを返します

ウェブブラウザーでページを開くと、ブラウザーはそのURLを管理するサーバーへ情報を送るように求めます。サーバーは要求に応じて、ページの内容とともに処理結果を示す3桁の「HTTPステータスコード」を返します。

正常に表示できたときの代表が「200 OK」、転送先があるときに使われるのが「301 Moved Permanently」などです。普段はブラウザーが裏側で処理するため、数字を意識することはほとんどありません。処理できなかったとき、エラーページに数字が書かれていれば利用者にも見えるようになります。

現行仕様のRFC 9110は、404について「対象のリソースについて現在の表現を見つけられない、または存在することを明かしたくない」場合の応答と定めています。少し難しい表現ですが、利用者の側から見れば、「いま指定されたURLから、求めた内容を受け取れない」という意味です。

ここで重要なのが、404だけでは、その状態が一時的なのか永久的なのか分からないことです。仕様にも、404は両者を区別しないと明記されています。

404でもページが消えたとは限らない3つのケース

ページの移転、一時停止、存在を隠す非公開状態の三つを並べた図解
404には、移転・一時停止・存在を隠す応答など複数の可能性があります

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を左右に並べた比較図
404は状態が一時的か永久的かを示さず、410は永久的と判断される消失を伝えます

404が一時的か永久的かを区別しないのに対し、対象が利用できない状態をサーバー側が永久的と判断している場合には「410 Gone」が用意されています。

404を見たことがあっても、410という表示には覚えがない人が多いかもしれません。一般的なサイトでは、削除されたURLもまとめて404として処理されることがあるためです。WordPressでも、削除した投稿を410にするには専用プラグインやサーバー側の設定など、通常とは別の対応が必要になります。

また、Googleは、代わりになるページがなく、内容がもう存在しないURLには404または410を返すよう案内しています。検索結果から外すという目的では両方が使えるため、サイト運営者が必ず410を選ばなければならないわけではありません。

410は規格上きちんと存在します。それでも、少なくとも削除後のURLを標準で404として扱うWordPressでは、追加対応をしない限り410という文字を目にしなくても不思議ではありません。404の意味を調べると、その隣に「永久的な消失」を伝える、見慣れない番号が隠れていました。

「404」という数字にまつわる説

ここまでが404の意味の話です。ここからは少し寄り道して、「なぜこの数字なのか」にまつわる説も見ておきましょう。

疑問符に囲まれた404号室の俗説と、400から404までの番号体系を対比した図解
404号室説は本人たちが否定。確認できるのは、4xxの番号体系に属することです

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が出たときの確認手順

  1. URLの入力間違いや、末尾まで正しくコピーできているかを確認する
  2. サイトのトップページやサイト内検索から、同じ題名を探す
  3. 検索エンジンで記事名や特徴的な文章を検索する

それでも見つからなければ、ページが削除された、公開を一時的に止めている、閲覧できる相手を限定している、といった可能性が残ります。404だけを見て、そのどれか一つに断定することはできません。

404は「ない」と断言する数字ではない

「404 Not Found」が伝えているのは、指定されたURLから現在の内容を受け取れないことです。別のURLへ移っているのか、一時的に見つからないのか、存在を隠しているのか、永久に削除されたのかまでは教えてくれません。

永久的な消失を伝える410 Goneが別に存在することを知ると、404の曖昧さがよく分かります。毎日のように見かけるエラー画面は、ページの最期を告げる墓標ではなく、サーバーが「ここではいま渡せません」とだけ答えている画面だったのです。

参考資料

コメント

タイトルとURLをコピーしました