Servlet HTTP ステータスコード
HTTP リクエストと HTTP レスポンスメッセージの形式は似ており、構造は次のとおりです:
- 初期ステータス行 + 復帰改行(CR+LF)
- ゼロ個以上のヘッダー行 + 復帰改行
- 空白行(復帰改行)
- オプションのメッセージ本体(ファイル、クエリデータ、クエリ出力など)
例えば、サーバーのレスポンスヘッダーは次のようになります:
HTTP/1.1 200 OK Content-Type: text/html Header2: ... ... HeaderN: ... (Blank Line) <!doctype ...> <html> <head>...</head> <body> ... </body> </html>
ステータス行には、HTTPバージョン(この例では HTTP/1.1)、ステータスコード(この例では 200)、およびステータスコードに対応する短いメッセージ(この例では OK)が含まれます。
Webサーバーから返される可能性のある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」が定義されていません。サーバーは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 ステータスコードの設定方法
以下のメソッドは、ServletプログラムでHTTPステータスコードを設定するために使用できます。これらのメソッドはHttpServletResponseオブジェクトを通じて利用できます。
| 番号 | メソッド & 説明 |
|---|---|
| 1 | public void setStatus ( int statusCode ) このメソッドは任意のステータスコードを設定します。setStatus メソッドは int(ステータスコード)を引数として受け取ります。レスポンスに特別なステータスコードとドキュメントが含まれている場合は、使用する前に必ずPrintWriter実際にコンテンツを返す前に setStatus を呼び出してください。 |
| 2 | public void sendRedirect(String url) このメソッドは、新しいドキュメントのURLを含むLocationヘッダーとともに302レスポンスを生成します。 |
| 3 | public void sendError(int code, String message) このメソッドは、ステータスコード(通常は404)を、HTMLドキュメント内で自動的にフォーマットされクライアントに送信される短いメッセージとともに送信します。 |
HTTP ステータスコードの例
次の例では、407エラーコードをクライアントブラウザに送信し、ブラウザには「Need authentication!!!」というメッセージが表示されます。
// 导入必需的 java 库
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
import javax.servlet.annotation.WebServlet;
@WebServlet("/showError")
// 扩展 HttpServlet 类
public class showError extends HttpServlet {
// 处理 GET 方法请求的方法
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// 设置错误代码和原因
response.sendError(407, "Need authentication!!!" );
}
// 处理 POST 方法请求的方法
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
上記のServletを呼び出すと、次の結果が表示されます:
HTTP Status 407 - Need authentication!!!type Status report message Need authentication!!! description The client must first authenticate itself with the proxy (Need authentication!!!). Apache Tomcat/5.5.29 |