HTTPとエラーコード

WWWでの情報のやり取りを定めた手順であるHTTP (Hypertext Transfer Protocol)では、ユーザー・エージェント(ブラウザ)からのリクエストにサーバーが答える対話形式でデータのやり取りが行われます。このとき、応答の1行目にステータスライン(Status-Line)というものが定義されており、この行は

(例) HTTP-Version SP Status-Code SP Reason-Phrase CRLF

という形式になっています(SPは空白文字、CRLFは改行コード)。ユーザーからのリクエストが何らかの(ユーザー側の)理由で処理できないとき、サーバーは400番台のStatus-Codeと、その意味をごく簡単に説明したReason-Phraseを返します。これを受けて、ブラウザは404 File Not Foundなどのエラーメッセージを表示しているのです。

一般的によく見かけるものは

404 Not Found
URIの記述が間違っているなど、指定されたリソース(ファイル)が見つからない場合。UNIXサーバーではファイル名の大文字と小文字が区別されるので、うっかりCaps LockをONにしたままURIを打ち込んだりするとこうなります。また、リンク先が移動してしまって、もうそこにファイルが存在しないというときもこのエラーになります。
403 Forbidden
サーバー上のCGIプログラムが収められたディレクトリなどは、普通のユーザーは直接アクセスできないようになっています。このようなところへのアクセスを試みた場合に、403のエラーが返されます。
401 Unauthorized
ユーザー名とパスワードによる認証を必要とする場所で、認証に失敗したときに返されます。

などです。

HTTPの初期段階でStatus-Codeがどのように構想されたかという興味深いドキュメントを http://www.w3.org/pub/WWW/Protocols/HTTP/HTRESP.html で読むことができます。基本的に、現在のStatus-Codeと同じものです。そのほか関連するリソースとしては:

などがあります。

HTTP/1.1 で示されているStatus-Codeは次のようになっています。

     100     Continue
     101     Switching Protocols
     200     OK
     201     Created
     202     Accepted
     203     Non-Authoritative Information
     204     No Content
     205     Reset Content
     206     Partial Content
     300     Multiple Choices
     301     Moved Permanently
     302     Moved Temporarily
     303     See Other
     304     Not Modified
     305     Use Proxy
     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 Time-out
     409     Conflict
     410     Gone
     411     Length Required
     412     Precondition Failed
     413     Request Entity Too Large
     414     Request-URI Too Large
     415     Unsupported Media Type
     500     Internal Server Error
     501     Not Implemented
     502     Bad Gateway
     503     Service Unavailable
     504     Gateway Time-out
     505     HTTP Version not supported