Servlet - 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 繼續 (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) 連結列表。使用者可以選擇一個連結並轉到該位置。最多五個地址。
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) 伺服器評估請求中給定的前提條件為假。
413 請求實體過大 (Request Entity Too Large) 伺服器將不接受請求,因為請求實體過大。
414 請求 URL 過長 (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 版本 (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)

此方法生成 302 響應以及包含新文件 URL 的`Location`標頭。

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);
   }
}

現在呼叫上述 Servlet 將顯示以下結果:

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

廣告
© . All rights reserved.