| HTTP |
|---|
| リクエスト方法 |
| ヘッダーフィールド |
| 応答ステータスコード |
| セキュリティアクセス制御方法 |
| セキュリティの脆弱性 |
HTTP において、404レスポンスステータスコードは、ウェブクライアント(ブラウザなど)がサーバーと通信できたものの、サーバーが要求されたリソースを提供できなかったことを示します。サーバーはリソースを保有していないか、保有しているかどうかを開示したくない可能性があります。[ 1 ]このコードは、多くの場合、レスポンス理由「Not Found」に関連付けられており、 「ページが見つかりません」または「ファイルが見つかりません」とも呼ばれます。
多くの場合、サーバーは該当の条件に対応するウェブページを生成し、クライアントはそれを表示します。そのコンテンツにはエラーコードが示されることが多いです。この条件は比較的頻繁に発生するため(例えば、リンク切れやデッドリンクなど)、このコードはワールドワイドウェブ上で最もよく認識されるものの1つです。

HTTP通信では、サーバーはWebブラウザからのWebページ要求などの要求に対し、数値の応答コードと、ステータスコードに基づいてオプション、必須、または許可されないメッセージで応答する必要があります。404コードの最初の数字は、Uniform Resource Locator(URL)の入力ミスなどのクライアントエラーを示します。次の2桁は、発生したエラーを示します。HTTPにおける3桁のコードの使用は、FTPやNNTPなどの以前のプロトコルにおける同様のコードの使用と同様です。HTTPレベルでは、404応答コードの後には、人間が判読できる「理由フレーズ」が続きます。HTTP仕様では「見つかりません」というフレーズ[ 1 ]が推奨されており、多くのWebサーバーはデフォルトで404コードと「見つかりません」というフレーズの両方を含むHTMLページを発行します。
404エラーは、ページが移動または削除されたときによく返されます。前者の場合は、URLマッピングまたはURLリダイレクトを使用して301 Moved Permanentlyレスポンスを返す方が適切です。これは、ほとんどのサーバー設定ファイルで設定できます。あるいはURL書き換えによっても設定できます。後者の場合は、410 Goneレスポンスを返すべきです。これらの2つのオプションは特別なサーバー設定を必要とするため、ほとんどのウェブサイトでは利用されていません。
404エラーは、指定されたURLが存在しないサーバー名を参照している場合に表示されるDNSエラーと混同しないでください。404エラーは、サーバー自体は見つかったものの、要求されたページを取得できなかったことを示します。
一部のウェブサイトでは、「見つかりません」というエラーを、通常のウェブページを「200 OK」というレスポンスコードで返すことで報告します。これは、ページが正常に読み込まれたという誤った報告です。これはソフト404と呼ばれます。「ソフト404」という用語は、2004年にZiv Bar-Yossefらによって導入されました。[ 2 ]
ソフト404は、リンク切れを自動的に検出する手法では問題となる。YahooやGoogleなどの一部の検索エンジンは、ソフト404の検出に自動プロセスを使用している。[ 3 ]ソフト404は、 Apacheソフトウェアなどの特定のHTTPサーバーソフトウェアの使用時に、エラードキュメント404(.htaccessファイルで指定)が相対パス(/error.html)ではなく絶対パス(例:http://example.com/error.html)で指定されている場合など、設定エラーが原因で発生することがある。[ 4 ]これは、一部のブラウザ( Internet Explorerなど)で、ブラウザ固有の「わかりやすい」エラーメッセージではなく、カスタマイズされた404エラーメッセージを表示させるために意図的に行われることもある(Internet Explorerでは、404が返され、受信したHTMLが一定の長さより短い場合にこの動作がトリガーされ、ユーザーは手動で無効にすることができる)。
また、コンテンツがステータス 200 で返されるものの、欠落しているページがドメイン ルート/ホームページにリダイレクトされる場合など、リダイレクトされたページからのものである「ソフト 3XX」エラーもあります。
一部のプロキシサーバーは、500番台のエラーコードの方が適切な場合でも、404エラーを生成します。プロキシサーバーがリモートホストの問題(ホスト名解決の失敗やTCP接続の拒否など)によりページへのリクエストを処理できない場合、これは5xx内部サーバーエラーとして記述されるべきですが、実際には404エラーが返される可能性があります。これにより、特定のレスポンスを期待してそれに基づいて動作するプログラムが混乱する可能性があります。なぜなら、Webサーバーが存在しないのか、Webサーバーは存在するのにWebページが見つからないのかを容易に区別できなくなるからです。
2004年7月、英国の通信事業者BTグループは、 Cleanfeedコンテンツブロッキングシステムを導入しました。このシステムは、インターネットウォッチ財団によって違法の可能性があると特定されたコンテンツへのリクエストに対して404エラーを返します。[ 5 ]他のISPも同様の状況でHTTP 403 「禁止」エラーを返します。 [ 6 ]検閲を隠蔽する手段として偽の404エラーを使用する慣行は、タイ[ 7 ]やチュニジアでも報告されています。[ 8 ] 2011年の革命以前から検閲が厳しかったチュニジアでは、人々が偽の404エラーの性質に気づき、「見えない検閲官」を表す「Ammar 404」という架空のキャラクターを作成しました。[ 9 ]
Microsoft が開発した Web サーバー ソフトウェアであるMicrosoft Internet Information Services (IIS) は、404 レスポンスとともにサブステータス コードのセットを返します。サブステータス コードは、404 ステータス コードに 10 進数の数値が付加された形式です。サブステータス コードはIANAによって正式には認識されておらず、Microsoft 以外のサーバーからは返されません。
Microsoft の IIS 7.0、IIS 7.5、および IIS 8.0 サーバーは、404 エラーのより具体的な原因を示すために、次の HTTP サブステータス コードを定義します。

ウェブサーバーは通常、より自然な説明、親サイトのブランディング、場合によってはサイトマップ、検索フォーム、または404ページウィジェットを含むカスタマイズされた404エラーページを表示するように設定できます。ユーザーには表示されないプロトコルレベルのフレーズは、ほとんどカスタマイズされません。ただし、 Internet Explorerは、512バイトを超えるカスタムページを表示せず、代わりに「フレンドリー」なエラーページを表示します。[ 10 ] Google Chromeにも同様の機能があり、ページサイズが512バイト未満の場合は、404エラーがGoogleアルゴリズムによって生成された代替候補に置き換えられます。[ 11 ]もう1つの問題は、ページにファビコンがなく、別途カスタム404ページが存在する場合、ページを表示するたびに余分なトラフィックが発生し、読み込み時間が長くなることです。[ 12 ] [ 13 ]
多くの組織は、本来は真面目なウェブサイトにユーモアを注入する機会として404エラーページを利用しています。例えば、Metro UKはスケートボードに乗ったホッキョクグマを表示し、ウェブ開発会社Left Logicはシンプルな描画プログラムを提供しています。[ 14 ] 2015年の英国総選挙キャンペーン中、主要政党はすべて404ページを使用して、政敵を攻撃したり、潜在的な支持者に関連政策を示したりしました。[ 15 ]ヨーロッパでは、Missing Children EuropeやChild Focusなど複数のヨーロッパ組織によって作成されたNotFoundプロジェクトが、サイト運営者に対して、行方不明の子供に関するデータを提供するカスタマイズされた404エラーページを提供するためのコードスニペットを追加することを奨励しています。[ 16 ] [ 17 ]
多くのウェブサイトは404エラーメッセージで、ウェブサイトのホームページへのリンクや検索ボックスなどの追加情報を送信しますが、ユーザーが探している正しいウェブページを見つけようと試みるウェブサイトもあります。一部のコンテンツ管理システム(CMS)には、これを行うための拡張機能が用意されています。 [ 18 ]
ウェブサイトをクロールして404ステータスコードを返すページを見つけるツールは数多く存在します。これらのツールは、特定のウェブサイト内に存在するリンクを見つけるのに役立ちます。しかし、これらのツールの限界は、特定のウェブサイト内のリンクしか見つけられず、他のウェブサイトへのリンクから発生する404エラーを無視してしまうことです。その結果、これらのツールはウェブサイト上の404エラーの83%を見逃してしまいます。[ 19 ]この問題を回避する方法の一つは、外部リンクを分析することで404エラーを見つけることです。[ 20 ]
404 エラーを発見する最も効果的な方法の 1 つは、Google Search Console、Google Analytics、またはクロール ソフトウェアを使用することです。
もう一つの一般的な方法は、ログファイル分析を用いて404ページへのトラフィックを追跡することです。[ 21 ]これは、404ユーザーがサイト上でどのページにアクセスしたかをより深く理解するのに役立ちます。404ページへのトラフィックを追跡するもう一つの方法は、JavaScriptベースのトラフィック追跡ツールを使用することです。[ 22 ]