JSP HTTP ステータスコード

HTTPリクエストとHTTPレスポンスの形式は似ており、以下のような構造を持っています:

  • ステータス行+CRLF(キャリッジリターン・ラインフィード)で始まります
  • ゼロ行または複数行のヘッダーモジュール+CRLF
  • 空行(例:CRLF)
  • オプションのメッセージボディ(ファイル、クエリデータ、クエリ出力など)

例えば、サーバーのレスポンスヘッダーは次のようになります:

HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
  (Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
ステータス行には、HTTPバージョン、ステータスコード、およびステータスコードに対応する短いメッセージが含まれます。

次の表は、サーバーから返される可能性のあるHTTPステータスコードとそれに関連するメッセージの一覧です:

ステータスコード メッセージ 説明
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 ハイパーリンクのリスト。ユーザーはハイパーリンクを選択してアクセスでき、最大5つのハイパーリンクをサポートします
301 Moved Permanently 要求されたページは新しいURLに移動しました
302 Found 要求されたページは一時的に新しいURLに移動しました
303 See Other 要求されたページは別のURLで見つけることができます
304 Not Modified  
305 Use Proxy  
306 Unused このステータスコードはもう使用されていませんが、ステータスコードは保持されています
307 Temporary Redirect 要求されたページは一時的に新しいURLに移動しました
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 要求されたページはもう利用できません
411 Length Required "Content-Length"が定義されておらず、サーバーはリクエストを拒否します
412 Precondition Failed リクエストの前提条件がサーバーによってfalseと評価されました
413 Request Entity Too Large リクエストのエンティティが大きすぎるため、サーバーはリクエストを拒否します
414 Request-url Too Long サーバーはURLが長すぎるためリクエストを拒否します。これは"POST"リクエストを"GET"リクエストに変換する際に大量のクエリ情報が付随する場合によく発生します
415 Unsupported Media Type サーバーはメディアタイプがサポートされていないため、リクエストを拒否します
417 Expectation Failed  
500 Internal Server Error リクエストが不完全で、サーバーは予期しない状況に遭遇しました
501 Not Implemented リクエストが不完全で、サーバーは必要な機能を提供しません
502 Bad Gateway リクエストが不完全で、サーバーは上流サーバーから無効なレスポンスを受け取りました
503 Service Unavailable リクエストが不完全で、サーバーは一時的に再起動またはシャットダウンしています
504 Gateway Timeout ゲートウェイタイムアウト
505 HTTP Version Not Supported サーバーは指定されたHTTPバージョンをサポートしていません

HTTPステータスコードを設定する方法

次の表は、HttpServletResponse クラスでステータスコードを設定するためのメソッドの一覧です:

S.N. メソッド & 説明
1 public void setStatus ( int statusCode )このメソッドは任意のステータスコードを設定できます。レスポンスに特別なステータスコードとドキュメントが含まれる場合は、PrintWriterを使用してコンテンツを返す前にsetStatusメソッドを呼び出してください
2 public void sendRedirect(String url)このメソッドは302レスポンスを生成し、同時にLocationヘッダーがURLに新しいドキュメントを伝えます
3 public void sendError(int code, String message)このメソッドはステータスコード(通常は404)と短いメッセージを自動的にHTMLドキュメントに挿入し、クライアントに送り返します

HTTPステータスコードのプログラム例

次の例では、407エラーコードをブラウザに送信し、ブラウザは「Need authentication!!!」と表示します。

<html>
<head>
<title>Setting HTTP Status Code</title>
</head>
<body>
<%
   // 设置错误代码,并说明原因
   response.sendError(407, "Need authentication!!!" );
%>
</body>
</html>

上記のJSPページにアクセスすると、以下の結果が得られます:

js_http_status_codes

他のステータスコードも試して、予期しない結果が得られるかどうか確認してみてください。

その他の拡張