English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet HTTP 状態コード

HTTPリクエストとHTTP応答メッセージの形式は似ており、以下の構造を持っています:

  • 初期状態行 + 改行符(改行+改行)

  • タイトル行が0個または複数。+改行符

  • 空白行、つまり改行符。

  • オプションのメッセージボディ、例えばファイル、クエリデータ、またはクエリ出力。

例えば、サーバーの応答ヘッダーは以下のようになります:

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ステータスコードと関連情報の一覧です:

コードメッセージ説明
100Continueリクエストの一部しかサーバーに受け取られていませんが、拒否されていない限り、クライアントはそのリクエストを続けます。
101Switching Protocolsサーバーがプロトコルを切り替えます。
200OKリクエストが成功しました。
201Createdこのリクエストは完全であり、新しいリソースを作成します。
202Acceptedこのリクエストは受理され処理されましたが、処理は不完全です。
203Non-authoritative Information 
204No Content 
205Reset Content 
206Partial Content 
300Multiple Choicesリンクリスト。ユーザーはリンクを選択してその場所に移動できます。最大で5つのアドレスです。
301Moved Permanentlyリクエストされたページは新しいURLに移動しました。
302Foundリクエストされたページは一時的に新しいURLに移動しました。
303See Otherリクエストされたページは別のURLで見つけることができます。
304Not Modified 
305Use Proxy 
306Unused以前のバージョンで使用されていたコードです。今は使用されていませんが、コードは保持されています。
307Temporary Redirectリクエストされたページは一時的に新しいURLに移動しました。
400Bad Requestサーバーはリクエストを理解できません。
401Unauthorizedリクエストされたページにはユーザー名とパスワードが必要です。
402Payment Requiredまだこのコードを使用することはできません。
403Forbiddenリクエストされたページへのアクセスが禁止されています。
404Not Foundサーバーはリクエストされたページを見つけることができません。
405Method Not Allowedリクエストで指定されたメソッドは許可されていません。
406Not Acceptableサーバーはクライアントが受け入れない応答を生成します。
407Proxy Authentication Requiredリクエストが到着する前に、プロキシサーバーの認証を使用する必要があります。
408Request Timeoutリクエストがサーバーが待つ時間よりも長く、タイムアウトしました。
409Conflictリクエストが衝突したため、完了できません。
410Goneリクエストされたページはもう利用できません。
411Length Required"Content"-"Length"は未定義です。クライアントがContentを含まないリクエストを送信したため、サーバーは処理できません。-Lengthのリクエスト情報
412Precondition Failedリクエストで提供された先決条件がサーバーでfalseと評価されました。
413Request Entity Too Largeリクエストエンティティが大きすぎるため、サーバーはこのリクエストを受け入れません。
414リクエスト-URL Too LongURLが長すぎるため、サーバーはこのリクエストを受け入れません。"post"リクエストを長いクエリ情報を持つ"get"リクエストに変換したときに発生します。
415サポートされていないメディアタイプメディアタイプがサポートされていないため、サーバーはこのリクエストを受け入れません。
417Expectation Failed 
500Internal Server Error未完了のリクエスト。サーバーが予期せぬ状況に直面しています。
501Not Implemented未完了のリクエスト。サーバーは必要な機能をサポートしていません。
502Bad Gateway未完了のリクエスト。サーバーが上位サーバーから無効な応答を受け取っています。
503Service Unavailable未完了のリクエスト。サーバーが一時的にオーバーキルまたはクラッシュしています。
504Gateway Timeoutゲートウェイタイムアウト。
505HTTP Version Not Supportedサーバーは「HTTPプロトコル」バージョンをサポートしていません。

HTTP 状態コードを設定する方法

以下のメソッドは、Servlet プログラムで HTTP 状態コードを設定するために使用できます。これらのメソッドは HttpServletResponse オブジェクトが利用可能です。

番号メソッド & 説明
1public void setStatus ( int statusCode )
このメソッドは任意の状態コードを設定します。setStatus メソッドは int(状態コード)を引数として受け取ります。応答に特別な状態コードとドキュメントが含まれている場合、使用する前に PrintWriter 実際に内容を返信する前に setStatus を呼び出す必要があります。
2public void sendRedirect(String url)
このメソッドは 302 応答、新しいドキュメント URL を含む Location ヘッダー。
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, "認証が必要です!!!" );
  }
  // POST メソッドリクエストを処理するメソッド
  public void doPost(HttpServletRequest request,
                     HttpServletResponse response)
      throws ServletException, IOException {
     doGet(request, response);
  }
}

今、上記の Servlet を呼び出すと以下の結果が表示されます:

HTTP 状態 407 - 認証が必要です!!!

type 状態報告

message 認証が必要です!!!

description クライアントはまずプロキシで自身を認証する必要があります(認証が必要です!!!)。

Apache Tomcat/5.5.29