HTTP 請求的格式和 HTTP 響應消息的格式是相似的且都有如下所示結構:
一個初始狀態(tài)行 + CRLF(回車 + 換行 即新行)
零個或多個標題行 + CRLF
一個空白行芥映,即一個 CRLF
一個可選的消息主體,如文件、查詢數(shù)據(jù)或查詢輸出
例如,服務器的響應頭信息看起來如下所示:
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)和一個對應于狀態(tài)碼的短消息(例子中的 OK)刊苍。
以下 HTTP 狀態(tài)碼以及可能從 Web 服務器返回的相關的消息的列表:
|
|100|Continue| 只有請求的一部分已經被服務器接收,但只要它沒有被拒絕,客戶端應繼續(xù)該請求蒋失。|
|101|Switching Protocols|服務器切換協(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|所請求的頁面已經轉移到一個新的 URL。|
|302 |Found |所請求的頁面已經臨時轉移到一個新的 URL踊谋。|
|303| See Other| 所請求的頁面可以在另一個不同的 URL 下被找到蝉仇。|
|304|Not Modified ||
|305| Use Proxy ||
|306| Unused| 在以前的版本中使用該代碼。現(xiàn)在已不再使用它殖蚕,但代碼仍被保留量淌。|
|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" 未定義。服務器無法處理客戶端發(fā)送的不帶 Content-Length 的請求信息未玻。|
|412|Precondition Failed |請求中給出的先決條件被服務器評估為 false灾而。|
|413|Request Entity Too Large|服務器不接受該請求,因為請求實體過大扳剿。|
|414|Request-url Too Long|服務器不接受該請求旁趟,因為 URL 太長。當你轉換一個 “post” 請求為一個帶有長的查詢信息的 “get” 請求時發(fā)生庇绽。|
|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 Version Not Supported| 服務器不支持“HTTP協(xié)議”版本。|
設置 HTTP 狀態(tài)碼的方法:
下面是在 servlet 程序中可以用于設置 HTTP 狀態(tài)碼的方法亚隅。通過 HttpServletResponse 對象這些方法是可用的硼莽。
序號 | 方法 | 描述 |
---|---|---|
1 | public void setStatus ( int statusCode ) | 該方法設置一個任意的狀態(tài)碼。setStatus 方法接受一個 int(狀態(tài)碼)作為參數(shù)煮纵。如果您的反應包含了一個特殊的狀態(tài)碼和文檔懂鸵,請確保在使用 PrintWriter 實際返回任何內容之前調用 setStatus。 |
2 | public void sendRedirect(String url) | 該方法生成一個 302 響應行疏,連同一個帶有新文檔 URL 的 Location 頭匆光。 |
3 | public void sendError(int code, String message) | 該方法發(fā)送一個狀態(tài)碼(通常為 404),連同一個在 HTML 文檔內部自動格式化并發(fā)送到客戶端的短消息酿联。 |
向客戶端輸出錯誤代碼如下:
package servletStudent;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class authon extends HttpServlet {
/**
*
*/
// private static final long serialVersionUID = 1L;
public authon() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("====");
// response.sendError(407, "sorry you cloud authion");
response.sendError(407, "Need authentication!!!" );
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
運行結果如圖: