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