Webページを閲覧していると,「404 Not Found」や「500 Internal Server Error」「503 Service Unavailable」といったエラーページを目にするかと思います。これは,何らかのエラーが発生してブラウザ画面に表示するメッセージですが,これらの数字にはそれぞれ意味があり,正式には「HTTPステータスコード」といいます。HTTPステータスコードには3桁の数字が割り当てられています。1桁目の数字は分類を表し,「4xx」がクライアントからのリクエストのエラー,「5xx」がサーバ上で発生したエラーを意味しています。また,エラーとして表示されないため,通常は目にすることはありませんが,「1xx」〜「3xx」も存在します。
1. 分類
HTTPステータスコードは,「1xx」〜「5xx」の5つに分類されます。100番台,200番台は通常は意識することはないでしょう。300番台はページを引っ越した場合(URLが変更された場合),リダイレクトの設定をするときに見たことがあるかと思います。400番台はURLの間違い,パスワードの間違いなどクライアントからのリクエストに誤りがあった場合に発生します。500番台はプログラムの文法ミスや,アクセスが殺到した場合などサーバでリクエストが正常に処理できなかった時に発生します。
- 1xx Informational (情報)
クライアントからリクエストが受け入れられ,サーバ上で処理が継続されている - 2xx Successful (成功)
クライアントからリクエストが成功した - 3xx Redirection (リダイレクション)
リクエストを完了させるために,他のURLを参照する必要がある - 4xx Client Error (クライアントエラー)
クライアントからのリクエストにエラーがあるため,リクエストに失敗した - 5xx Server Error (サーバエラー)
サーバ側の問題により,リクエストに失敗した
2. 覚えておきたいコード
HTTPサーバの生ログを読む必要があるサーバ管理者であれば,日常的にHTTPステータスコードを目にしているでしょう。ここでは,サーバ管理者の諸兄姉向けでなく,Webサイトの企画者やデザイナーを対象に覚えておいて損はない「HTTPステータスコード」をご紹介します。
301 Moved Permanently
「301 Moved Permanently」はエラーでないため,Webページを閲覧しているだけでしたら目にすることはないでしょう。ブラウザ画面に表示することはありませんが,WebページもしくはWebサイト全体が引っ越しした場合(URLやドメインが変更になった場合),「.htaccess」ファイルに301リダイレクトを設定することはあるかと思います。
RewriteEngine on
RewriteRule ^index\.html$ index.php [R=301,L]
※「.htaccess」ファイルの設定例。index.htmlをindex.phpに301リダイレクト。
400 Bad Request
ブラウザから送信されたリクエストに問題があった場合に発生します。このエラーに遭遇することは,それほど多くはないかと思います。使用したブラウザに問題がある場合が多いので,他のブラウザ(他のバージョンを含む)でアクセスしたり,Cookieやキャッシュのクリア,プラグインの無効化を試してみてください。
401 Unauthorized
Basic認証やDigest認証などで,パスワードが間違っていた場合に表示されるエラーです。入力したID及びパスワードを再確認してください。サーバ側のパスワード設定が誤っている場合もあります。サーバの管理権限がある場合は,パスワード設定ファイルも確認してください。
403 Forbidden
ページが存在するものの,閲覧が禁止されたファイルもしくはディレクトリにアクセスした場合に表示されるエラーです。通常は,サイト管理者が意図してアクセス権を設定しています。まれに,サイト管理者の設計や設定のミス,非常にアクセスが集中している時,URLが間違っている場合もあります。時間をあけてアクセスしたり,URLを再確認してください。また,サーバの管理権限がある場合は,該当ファイルのパーミッションを見直してください(「.htaccess」ファイルでアクセス制御している場合もあります)。
404 Not Found
ページが削除されたり,引っ越しした場合(URLが変更された場合)に表示されるエラーです。比較的遭遇する確率が高いエラーです。もともと,存在しないページアクセスした場合もこのエラーが表示されます。URLを再確認してからアクセスしてください。サイト管理者の場合は,サーバにファイルをPUTし忘れていないか,誤ったディレクトリにファイルをPUTしていないか,誤ってページを削除していないか確認してください。
500 Internal Server Error
プログラム(スクリプト)の文法ミスや,プログラムがアクセスするファイルやディレクトリのパーミッションの設定に誤りがある場合に表示されます。プログラムのチェック,パーミッションの見直し,「.htaccess」の設定確認を行ってください。サーバ上の一時的な問題で,ブラウザーをリロードすると正常にページが表示される場合もあります。
503 Service Unavailable
サーバの負荷が限界を超えている場合や,サーバのメンテナンスでブラウザからのリクエストを受け付けることができない場合に表示するエラーです。レンタルサーバの場合,他の利用者がサーバに高負荷がかかるCGIを動かしている場合もあります。暫く時間をあけてからアクセスしてください。
3. コード一覧
1xx Informational
- 100 Continue
クライアントはリクエストを継続できる - 101 Switching Protocols
サーバーはプロトコルを切り替えている - 102 Processing
処理が継続されている
2xx Successful
- 200 OK
リクエストが成功した - 201 Created
リクエスト完了(PUTメソッド) - 202 Accepted
リクエスト未完(PUTメソッド) - 203 Non-Authoritative Information
非認定情報 - 204 No Content
ブラウザ画面を更新しない - 205 Reset Content
ブラウザ画面を初期化する - 206 Partial Conten
レジューム(部分的GETリクエスト) - 207 Multi-Status
複数のステータスが存在する - 226 IM Used
Delta encoding in HTTP の拡張ステータス
3xx Redirection
- 300 Multiple Choice
リクエストに対して複数のレスポンスがある(それらからひとつを選択する) - 301 Moved Permanently
リクエストしたリソースが恒久的に異なるURIに移動 - 302 Found
リクエストしたリソースが一時的に異なるURIに移動 - 303 See Other
リクエストに対するレスポンスは異なるURIで発見(GETメソッド) - 304 Not Modified
リクエストしたリソースは更新されていない - 305 Use Proxy
(セキュリティの懸念により非推奨) - 306 (unused)
(未使用) - 307 Temporary Redirect
一時的リダイレクト(リクエストのメソッドはリダイレクト前後で同じであること) - 308 Permanent Redirect
恒久的リダイレクト(リクエストのメソッドはリダイレクト前後で同じであること)
4xx Client Error
- 400 Bad Request
リクエストがサーバに理解されなかった - 401 Unauthorized
ユーザ認証に失敗した - 402 Payment Required
(未使用) - 403 Forbidden
アクセス権限がない - 404 Not Found
リクエストしたURLが存在しない - 405 Method Not Allowed
リクエストしたメソッドは不許可 - 406 Not Acceptable
リクエストは受理できない - 407 Proxy Authentication Required
プロキシに対する認証が必要 - 408 Request Timeout
リクエストが時間以内に完了していない - 409 Conflict
リクエストが現在のリソースと矛盾する - 410 Gone
リクエストしたリソースが存在しない - 411 Length Required
Content-Lengthのないリクエストの受理を拒否 - 412 Precondition Failed
リクエストが不正であると評価された - 413 Payload Too Large
リクエスト実体がサーバーの想定よりも大きい - 414 URI Too Long
リクエストURIがサーバーの想定よりも大きい - 415 Unsupported Media Type
リクエストされたリソースがサーバでサポートしていないフォーマットである - 416 Requested Range Not Satisfiable
リクエストされたデータのサイズが超過した - 417 Expectation Failed
Expectヘッダによる拡張が失敗した - 418 I’m a teapot
(ジョークコード) - 421 Misdirected Request
リクエストはレスポンスを生成できないサーバーに送られた - 422 Unprocessable Entity
意味が誤っているために従うことができない(WebDAVの拡張コード) - 423 Locked
アクセス中のリソースはロックされている(WebDAVの拡張コード) - 424 Failed Dependency
依存関係でリクエストに失敗した(WebDAVの拡張コード) - 426 Upgrade Required
プロトコルのアップグレードを要求(Upgrading to TLS Within HTTP/1.1の拡張コード) - 428 Precondition Required
リクエストが条件付きになる(ロストアップデート問題の防止) - 429 Too Many Requests
一定の時間内に大量のリクエストを送信した - 431 Request Header Fields Too Large
ヘッダーフィールドが大きすぎる - 451 Unavailable For Legal Reasons
違法なリソース(政府によって検閲されたウェブページ)を要求した
5xx Server Error
- 500 Internal Server Error
サーバ内部でエラーが発生 - 501 Not Implemented
リクエストメソッドがサーバでサポートされていない - 502 Bad Gateway
ゲートウェイ・プロキシサーバは不正な要求を受け取った - 503 Service Unavailable
サービスが一時的に過負荷やメンテナンス中である - 504 Gateway Timeout
ゲートウェイとして動作するサーバが時間内にレスポンスを得られない - 505 HTTP Version Not Supported
リクエストがサポートされていないHTTPバージョンである - 506 Variant Also Negotiates
サーバー内部で設定エラーが発生した(Transparent Content Negotiation in HTTPの拡張コード) - 507 Insufficient Storage
リクエストを処理するためのストレージの容量が足りない(WebDAVの拡張コード) - 508 Loop Detected
リクエストの処理中に無限ループを検出した(WebDAVの拡張コード) - 509 Bandwidth Limit Exceeded
そのサーバに設定されている帯域幅を使い切った - 510 Not Extended
サーバーがリクエストを処理するために拡張が必要(An HTTP Extension Frameworkの拡張コード) - 511 Network Authentication Required
クライアントがネットワークでアクセスするために認証が必要