HTTP 請求和 HTTP 響應(yīng)消息的格式是類似的,結(jié)構(gòu)如下:
• 初始狀態(tài)行 + 回車換行符(回車+換行)
• 零個或多個標題行+回車換行符
• 一個空白行,即回車換行符
• 一個可選的消息主體,比如文件、查詢數(shù)據(jù)或查詢輸出
例如,服務(wù)器的響應(yīng)頭如下所示:
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(Blank Line)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
狀態(tài)行包括 HTTP 版本(在本例中為 HTTP/1.1)、一個狀態(tài)碼(在本例中為 200)和一個對應(yīng)于狀態(tài)碼的短消息(在本例中為 OK)。
以下是可能從 Web 服務(wù)器返回的 HTTP 狀態(tài)碼和相關(guān)的信息列表:
|
代碼 |
消息 |
描述 |
|---|---|---|
|
100 |
Continue |
只有請求的一部分已經(jīng)被服務(wù)器接收,但只要它沒有被拒絕,客戶端應(yīng)繼續(xù)該請求。 |
|
101 |
Switching Protocols |
服務(wù)器切換協(xié)議。 |
|
200 |
OK |
請求成功。 |
|
201 |
Created |
該請求是完整的,并創(chuàng)建一個新的資源。 |
|
202 |
Accepted |
該請求被接受處理,但是該處理是不完整的。 |
|
203 |
Non-authoritative Information |
|
|
204 |
No Content |
|
|
205 |
Reset Content |
|
|
206 |
Partial Content |
|
|
300 |
Multiple Choices |
鏈接列表。用戶可以選擇一個鏈接,進入到該位置。最多五個地址。 |
|
301 |
Moved Permanently |
所請求的頁面已經(jīng)轉(zhuǎn)移到一個新的 URL。 |
|
302 |
Found |
所請求的頁面已經(jīng)臨時轉(zhuǎn)移到一個新的 URL。 |
|
303 |
See Other |
所請求的頁面可以在另一個不同的 URL 下被找到。 |
|
304 |
Not Modified |
|
|
305 |
Use Proxy |
|
|
306 |
Unused |
在以前的版本中使用該代碼?,F(xiàn)在已不再使用它,但代碼仍被保留。 |
|
307 |
Temporary Redirect |
所請求的頁面已經(jīng)臨時轉(zhuǎn)移到一個新的 URL。 |
|
400 |
Bad Request |
服務(wù)器不理解請求。 |
|
401 |
Unauthorized |
所請求的頁面需要用戶名和密碼。 |
|
402 |
Payment Required |
您還不能使用該代碼。 |
|
403 |
Forbidden |
禁止訪問所請求的頁面。 |
|
404 |
Not Found |
服務(wù)器無法找到所請求的頁面。 |
|
405 |
Method Not Allowed |
在請求中指定的方法是不允許的。 |
|
406 |
Not Acceptable |
服務(wù)器只生成一個不被客戶端接受的響應(yīng)。 |
|
407 |
Proxy Authentication Required |
在請求送達之前,您必須使用代理服務(wù)器的驗證。 |
|
408 |
Request Timeout |
請求需要的時間比服務(wù)器能夠等待的時間長,超時。 |
|
409 |
Conflict |
請求因為沖突無法完成。 |
|
410 |
Gone |
所請求的頁面不再可用。 |
|
411 |
Length Required"Content-Length" |
未定義。服務(wù)器無法處理客戶端發(fā)送的不帶 Content-Length 的請求信息。 |
|
412 |
Precondition Failed |
請求中給出的先決條件被服務(wù)器評估為 false。 |
|
413 |
Request Entity Too Large |
服務(wù)器不接受該請求,因為請求實體過大。 |
|
414 |
Request-url Too Long |
服務(wù)器不接受該請求,因為 URL 太長。當(dāng)您轉(zhuǎn)換一個 "post" 請求為一個帶有長的查詢信息的 "get" 請求時發(fā)生。 |
|
415 |
Unsupported Media Type |
服務(wù)器不接受該請求,因為媒體類型不被支持。 |
|
417 |
Expectation Failed |
|
|
500 |
Internal Server Error |
未完成的請求。服務(wù)器遇到了一個意外的情況。 |
|
501 |
Not Implemented |
未完成的請求。服務(wù)器不支持所需的功能。 |
|
502 |
Bad Gateway |
未完成的請求。服務(wù)器從上游服務(wù)器收到無效響應(yīng)。 |
|
503 |
Service Unavailable |
未完成的請求。服務(wù)器暫時超載或死機。 |
|
504 |
Gateway Timeout |
網(wǎng)關(guān)超時。 |
|
505 |
HTTP Version Not Supported |
服務(wù)器不支持"HTTP協(xié)議"版本。 |
設(shè)置 HTTP 狀態(tài)代碼的方法
下面的方法可用于在 Servlet 程序中設(shè)置 HTTP 狀態(tài)碼。這些方法通過 HttpServletResponse 對象可用。
|
序 號 |
方法 & 描述 |
|---|---|
| 1 |
public void setStatus ( int statusCode ) 該方法設(shè)置一個任意的狀態(tài)碼。setStatus 方法接受一個 int(狀態(tài)碼)作為參數(shù)。如果您的反應(yīng)包含了一個特殊的狀態(tài)碼和文檔,請確保在使用 PrintWriter 實際返回任何內(nèi)容之前調(diào)用 setStatus。 |
| 2 |
public void sendRedirect(String url) 該方法生成一個 302 響應(yīng),連同一個帶有新文檔 URL 的 Location 頭。 |
| 3 |
public void sendError(int code, String message) 該方法發(fā)送一個狀態(tài)碼(通常為 404),連同一個在 HTML 文檔內(nèi)部自動格式化并發(fā)送到客戶端的短消息。 |
HTTP 狀態(tài)碼實例
下面的例子把 407 錯誤代碼發(fā)送到客戶端瀏覽器,瀏覽器會顯示 "Need authentication!!!" 消息。
// 導(dǎo)入必需的 java 庫
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
// 擴展 HttpServlet 類
public class showError extends HttpServlet {
// 處理 GET 方法請求的方法
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
{
// 設(shè)置錯誤代碼和原因
response.sendError(407, "Need authentication!!!" );
}
// 處理 POST 方法請求的方法
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
現(xiàn)在,調(diào)用上面的 Servlet 將顯示以下結(jié)果:
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