サーブレット-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 / 1.1)、ステータスコード(例では200)、およびステータスコードに対応する非常に短いメッセージ(例ではOK)で構成されています。

以下は、Webサーバーから返される可能性のあるHTTPステータスコードと関連メッセージのリストです。

コード メッセージ 説明
100 継続する リクエストの一部のみがサーバーによって受信されましたが、それが拒否されない限り、クライアントはリクエストを続行する必要があります
101 スイッチングプロトコル サーバーはプロトコルを切り替えます。
200 OK リクエストはOKです
201 作成した リクエストが完了し、新しいリソースが作成されます
202 承認済み リクエストは処理のために受け入れられますが、処理は完了していません。
203 信頼できない情報  
204 コンテンツなし  
205 コンテンツをリセット  
206 部分的なコンテンツ  
300 複数の選択肢 リンクリスト。ユーザーはリンクを選択してその場所に移動できます。最大5つのアドレス
301 恒久的に移動 リクエストされたページは新しいURLに移動しました
302 見つかりました リクエストされたページは一時的に新しいURLに移動しました
303 その他を見る リクエストされたページは別のURLにあります
304 変更なし  
305 プロキシを使う  
306 未使用 このコードは以前のバージョンで使用されていました。使用されなくなりましたが、コードは予約されています
307 一時的なリダイレクト リクエストされたページは一時的に新しいURLに移動しました。
400 要求の形式が正しくありません サーバーはリクエストを理解しませんでした
401 許可されていない リクエストされたページにはユーザー名とパスワードが必要です
402 支払いが必要 このコードはまだ使用できません
403 禁止 リクエストされたページへのアクセスは禁止されています
404 見つかりません サーバーは要求されたページを見つけることができません。
405 許可されていない方法 リクエストで指定されたメソッドは許可されていません。
406 受け付けできません サーバーは、クライアントによって受け入れられない応答のみを生成できます。
407 プロキシ認証が必要 このリクエストを処理する前に、プロキシサーバーで認証する必要があります。
408 リクエストタイムアウト サーバーが待機する準備ができているよりも、要求に時間がかかりました。
409 競合 競合のため、リクエストを完了できませんでした。
410 なくなった リクエストされたページは利用できなくなりました。
411 必要な長さ 「Content-Length」は定義されていません。サーバーはそれなしではリクエストを受け入れません。
412 前提条件が失敗しました リクエストで指定された前提条件は、サーバーによってfalseと評価されました。
413 エンティティが大きすぎるリクエスト リクエストエンティティが大きすぎるため、サーバーはリクエストを受け入れません。
414 Request-urlが長すぎます URLが長すぎるため、サーバーはリクエストを受け入れません。「post」リクエストを長いクエリ情報を含む「get」リクエストに変換すると発生します。
415 サポートされていないメディアタイプ メディアタイプがサポートされていないため、サーバーは要求を受け入れません。
417 期待に失敗しました  
500 内部サーバーエラー リクエストは完了しませんでした。サーバーが予期しない条件を満たしました。
501 実装されていません リクエストは完了しませんでした。サーバーは必要な機能をサポートしていませんでした。
502 悪いゲートウェイ リクエストは完了しませんでした。サーバーがアップストリームサーバーから無効な応答を受信しました。
503 サービスは利用できません リクエストは完了しませんでした。サーバーが一時的に過負荷またはダウンしています。
504 ゲートウェイタイムアウト ゲートウェイがタイムアウトしました。
505 HTTPバージョンはサポートされていません サーバーは「httpプロトコル」バージョンをサポートしていません。

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

次のメソッドを使用して、サーブレットプログラムで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エラーコードをクライアントブラウザに送信し、ブラウザに「認証が必要です!!!」と表示される例です。メッセージ。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;

// Extend HttpServlet class
public class showError extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set error code and reason.
      response.sendError(407, "Need authentication!!!" );
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      doGet(request, response);
   }
}

上記のサーブレットを呼び出すと、次の結果が表示されます-

HTTP Status 407 - Need authentication!!!

type Status report

messageNeed authentication!!!

descriptionThe client must first authenticate itself with the proxy (Need authentication!!!).

Apache Tomcat/5.5.29