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ページにアクセスすると、以下の結果が得られます:
他のステータスコードも試して、予期しない結果が得られるかどうか確認してみてください。
その他の拡張