ステータス応答一覧
|
HTTP応答パケットの初期応答行はステータス行とも呼ばれ、HTTPバージョン、ステータスコード、そしてそれに関するメッセージからなる。HTTPバージョンとメッセージはエンジン側で生成する(サーブレット仕様の2.3版ではサーブレットがHTTPバージョンを指定できる)ので、サーブレット側が指定するのはステータスコードである。これはsetStatusメソッドでステータスコードを指定する。パラメタは整数型であるが、HttpServletResponseクラスで定義されているコード(またはフィールド)を使ったほうが判りやすい。ステータスコードは以下に一覧で示す(Servlet仕様書ではHTTP仕様書にある307が欠落している)。
HTMLでエラー情報をクライアントに返したいとき(指定されたファイルが存在しないとか、フォーム入力データに誤りがあるなど)は、まずsetStatusメソッドを呼んだ後にPrintWriterにそのHTMLメッセージを書き込む。sendErrorメソッドはこれを一度にやってくれる。このメソッドはこのメソッドで指定したメッセージHTML化し、404や403などのエラー応答としてくれる。
sendRedirectメソッドは新しいドキュメントのURLを示すLocationヘッダを付けた302応答を生成してくれる。
添付資料にあるステータスコードのうち、HTTP/1.1で新しく規定されているものをHTTP/1.0クライアントに返してはならない。これはプログラマの責任である。あらかじめHttpServletRequest.getProtocolメソッドでクライアントのバージョンを確認することが好ましい。
|
|
|
|
ステータスコード |
HttpServletResponseフィールド |
メッセージ |
意味 |
100 |
SC_CONTINUE |
Continue |
該要求を継続してよい ( HTTP 1.1で追加) |
101 |
SC_SWITCHING_PROTOCOLS |
Switching Protocols |
サーバが上のバージョンで対応したいのでクライアントでプロトコルを変えてほしい( HTTP 1.1で追加) |
200 |
SC_OK |
OK |
総て問題なし。要求に対するドキュメントを返す。これはデフォルトであり、サーブレットが特にsetStatusやsendErrorで指定しなければエンジンはこのステータス行を生成する。 |
201 |
SC_CREATED |
Created |
サーバがドキュメントを生成した。LocationヘッダでそのURLを示す。 |
202 |
SC_ACCEPTED |
Accepted |
要求を受理したが処理は終了していない。 |
203 |
SC_NON_AUTHORITATIVE_INFORMATION |
Non-Authoritative Information |
ドキュメントは通常どおり返すが、ドキュメントのコピーが使われているので応答ヘッダ行のいくつかは正しくない可能性がある。( HTTP 1.1で追加) |
204 |
SC_NO_CONTENT |
No Content |
新しいドキュメントが存在しないのでブラウザはその前の表示を継続のこと。これはユーザが周期的にあるページを再ロードする場合に有用であり、この前に読み出したページがすでに更新済みであることが判る。ただし、Refreshヘッダ行やそれと等価な<META
HTTP-EQUIV="Refresh" ...> で自動的に再ロードされるページでは、このステータスコードを返すと以降の最ロードを停止させるので注意。しかし、Javaスクリプトベースの自動再ロードにおいてはかかる場合でも機能する。 |
205 |
SC_RESET_CONTENT |
Reset Content |
新しいドキュメントは無いが、ブラウザはドキュメント画面をリセットしなければならない。これはブラウザにCGIフォームフィールドのクリアをさせるのに使われる。( HTTP 1.1で追加) |
206 |
SC_PARTIAL_CONTENT |
Partial Content |
クライアントがRangeヘッダ行をつけて部分要求を送ってきたため、サーバはこの要求を満足させる。( HTTP 1.1で追加) |
300 |
SC_MULTIPLE_CHOICES |
Multiple Choices |
要求されたドキュメントは複数存在する。これらのリストを返すドキュメントに含める。サーバとして好ましいものがあれば、それはLocation応答ヘッダ行にリストしなければならない。 |
301 |
SC_MOVED_PERMANENTLY |
Moved Permanently |
要求されたドキュメントはほかに移ってしまっている。移った先のURLはLocation応答ヘッダ行で示してある。ブラウザは自動的に新しいURLにリンクしなければならない。 |
302 |
SC_MOVED_TEMPORARILY |
Found |
301と類似しているが、URLは一時的な代替で、永久的な移動ではないと解釈しなければならない。注意:このメッセージはHTTP/1.0では"Moved
Temporarily"だったが、HttpServletResponseにおける定数もSC_MOVED_TEMPORARILYとなっており、SC_FOUNDではない。ブラウザが自動的に新しいURLにリンクしてくれるので非常に有用である。従ってsendRedirectと専用のメソッドが用意されている。response.sendRedirect(url)を使う場合はresponse.setStatus(response.SC_MOVED_TEMPORARILY)とresponse.setHeader("Location",
url)を使う場合より二つの利点が生じる。最初に、この方が簡単だということであり、二つ目としてとしてsendRedirectを使うと自動的にリンク先を示すページを生成してくれることで、これはリダイレクションの効かない古いタイプのブラウザに新しいリンク先を表示させる。最後にsendRedirectは相対URLを処理でき、これを絶対URLに変換してくれる。注意:このステータスコードは301と互換可能なものとして時々使われる。例えば、ユーザが最後のスラッシュを忘れて間違えてhttp://host/~userのように要求してしまったとき、サーバによっては301を返すものと302を返すものが存在する。技術的に云えば元の要求がGETであったときのみブラウザは自動的にリダイレクションに従うことが期待されている。詳細は307ヘッダの項を参照のこと。 |
303 |
SC_SEE_OTHER |
See Other |
301/302と類似。ただし元の要求がPOSTであって、Locationヘッダ行に指定されているリダイレクトのドキュメントはGETで取得しなければならないところが違う。( HTTP 1.1で追加) |
304 |
SC_NOT_MODIFIED |
Not Modified |
クライアントはキャッシュしたドキュメントを保有しており、条件付の要求(通常If-Modified-Since要求ヘッダ行でこの日付よりアップデートされたものを要求する)をしてきた。サーバがその課や主されている古いドキュメントが引き続き使われるべきであるとクライアントに伝える時に使用する。 |
305 |
SC_USE_PROXY |
Use Proxy |
要求されたドキュメントをLocationヘッダでリストアップされたプロキシを介して取得されたいことをクライアントに通知する。( HTTP 1.1で追加) |
307 |
定義なし |
Temporary Redirect |
これは302
("Found" または "Temporarily Moved")と同じ。これは、あまりに多くのブラウザが、元のメッセージがPOSTであったにもかかわらず302応答のリダイレクションに従ってしまった為(POST要求に対しては303応答にのみ従わねばならないことになっていた)、HTTP/1.1で追加されたものである。この応答はあいまいさを排除するため、303応答にはもとの要求がGETでもPOSTでもリダイレクションに従うが、307応答にはGET要求に対するもののみリダイレクションに従うものとしたものである。注意:何らかの理由により、このステータスコードに対する定数がHttpServletResponseに存在していない。( HTTP 1.1で追加) |
400 |
SC_BAD_REQUEST |
Bad Request |
その要求には文法上の誤りがある。 |
401 |
SC_UNAUTHORIZED |
Unauthorized |
クライアントがその為の認証をしないでパスワードの保護のかかったページをアクセスしようとした。応答には、WWW-Authenticateヘッダ行を含め、 ブラウザがこれを使ってユーザ名とパスワードのダイヤログボックスをポップアップさせる。今度はそれによりAuthorization ヘッダ行をつけてサーバに再要求することになる。 |
402 |
SC_PAYMENT_REQUIRED |
Payment Required |
このリソースの取得には料金が必要である。 |
403 |
SC_FORBIDDEN |
Forbidden |
そのリソースは認証に係わらず取得できない。これはしばしばサーバ側でファイルの不良やディレクトリが許可されていないなどによる。 |
404 |
SC_NOT_FOUND |
Not Found |
そのアドレスではリソースが存在しない。「そんなページは無い」場合の標準的応答である。これも一般的で有用な応答なのでHttpServletResponse:
sendError(message)という特別なメソッドが用意されている。setStatusに比べてsendErrorを使うとサーバが自動的にブラウザにエラーメッセージを表示するようにエラーページを生成してくれることである。 |
405 |
SC_METHOD_NOT_ALLOWED; |
Method Not Allowed |
要求されたメソッド(GET, POST,
HEAD, DELETE, PUT, TRACE, etc.)は該リソースでは許されていない。( HTTP 1.1で追加) |
406 |
SC_NOT_ACCEPTABLE |
Not Acceptable |
クライアントがAcceptヘッダ行で指定したMIMEタイプと互換性の無いMIMEタイプで該リソースを生成した。( HTTP 1.1で追加) |
407 |
SC_PROXY_AUTHENTICATION_REQUIRED |
Proxy
Authentication Required |
401と類似だが、プロキシサーバはProxy-Authenticateヘッダを返さなければならない。( HTTP 1.1で追加) |
408 |
SC_REQUEST_TIMEOUT |
Request
Timeout |
クライアントがその要求を送信するのに時間をかけてしまった。( HTTP 1.1で追加) |
409 |
SC_CONFLICT |
Conflict |
通常PUT要求の結果発生する。正しくないバージョンのファイルをアップロードしようとした場合に使う。( HTTP 1.1で追加) |
410 |
SC_GONE |
Gone |
ドキュメントが無くなっている。転送すべきアドレスもわからない。404応答と異なる点は、この場合永久に無くなったことで、404のように不明の理由で取得できないということではない。( HTTP 1.1で追加) |
411 |
SC_ LENGTH_REQUIRED |
Length
Required |
クライアントがContent-Lengthヘッダで長さを通知しないとサーバはその要求を処理できない。( HTTP 1.1で追加) |
412 |
SC_PRECONDITION_FAILED |
Precondition
Failed |
要求ヘッダにある前条件のどれかに誤りがある。( HTTP 1.1で追加) |
413 |
SC_REQUEST_ENTITY_TOO_LARGE |
Request
Entity Too Large |
要求されたドキュメントが現在サーバが処理したいサイズを超えている。サーバが後でそれを処理できる場合はRetry-After ヘッダをこの応答に含めねばならない。( HTTP 1.1で追加) |
414 |
SC_REQUEST_URI_TOO_LONG |
Request
URI Too Long |
そのURLは長すぎる。( HTTP 1.1で追加) |
415 |
SC_UNSUPPORTED_MEDIA_TYPE |
Unsupported
Media Type |
要求のフォーマットが未知である。( HTTP 1.1で追加) |
416 |
SC_REQUESTED_RANGE_NOT_SATISFIABLE |
Requested
Range Not Satisfiable |
クライアントが満足できないRange ヘッダ行の要求をした。( HTTP 1.1で追加) |
417 |
SC_EXPECTATION_FAILED |
Expectation
Failed |
Expect 要求ヘッダの値が合致できない。( HTTP 1.1で追加) |
500 |
SC_INTERNAL_SERVER_ERROR |
Internal
Server Error |
「サーバどうしてよいかわからなくなった」ときの総称的メッセージ。CGIプログラムやサーブレットがクラッシュしたり正しくない書式のヘッダを返した場合に生じる。 |
501 |
SC_NOT_IMPLEMENTED |
Not
Implemented |
サーバがその要求を満足させるための機能的を有さない。例えば、クライアントがそのサーバがサポートしないPUT指令を発した時などに使う。 |
502 |
SC_BAD_GATEWAY |
Bad
Gateway |
プロキシやゲートウェイとして動作するサーバが使う。最初のサーバがリモートのサーバから正しくない応答を受理したことを示す。 |
503 |
SC_SERVICE_UNAVAILABLE |
Service
Unavailable |
サーバが保守や過負荷のために現在応答できない。たとえば、スレッドやデータベースの接続プールを全部使い切っている場合など。サーバはRetry-After ヘッダ行をつけることができる。 |
504 |
SC_GATEWAY_TIMEOUT |
Gateway
Timeout |
プロキシやゲートウェイとして動作するサーバが使う。最初のサーバがリモートのサーバから所定の時間内に応答しなかったことを示す。( HTTP 1.1で追加) |
505 |
SC_HTTP_VERSION_NOT_SUPPORTED |
HTTP
Version Not Supported |
サーバがHTTP表示のバージョンに対応できない。( HTTP 1.1で追加) |