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に移動しました。
400Bad 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  
500Internal Server Error リクエストを完了できませんでした。サーバーで予期しない状況が発生しました。
501 Not Implemented リクエストを完了できませんでした。サーバーは要求された機能をサポートしていません。
502 Bad Gateway リクエストを完了できませんでした。サーバーは上流のサーバーから無効なレスポンスを受信しました。
503 Service Unavailable リクエストを完了できませんでした。サーバーは一時的に過負荷またはダウンしています。
504 Gateway Timeout ゲートウェイタイムアウト。
505 HTTP Version Not Supported サーバーは「HTTPプロトコル」のバージョンをサポートしていません。

HTTP ステータスコードの設定方法

以下のメソッドは、ServletプログラムでHTTPステータスコードを設定するために使用できます。これらのメソッドはHttpServletResponseオブジェクトを通じて利用できます。

番号メソッド & 説明
1public void setStatus ( int statusCode )
このメソッドは任意のステータスコードを設定します。setStatus メソッドは int(ステータスコード)を引数として受け取ります。レスポンスに特別なステータスコードとドキュメントが含まれている場合は、使用する前に必ずPrintWriter実際にコンテンツを返す前に setStatus を呼び出してください。
2public void sendRedirect(String url)
このメソッドは、新しいドキュメントのURLを含むLocationヘッダーとともに302レスポンスを生成します。
3public 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

その他の拡張