HTTP 狀態(tài)碼

2018-08-12 21:19 更新

HTTP 狀態(tài)碼

HTTP 請求的格式和 HTTP 響應(yīng)消息的格式是相似的且都有如下所示結(jié)構(gòu):

  • 一個初始狀態(tài)行 + CRLF(回車 + 換行 即新行)

  • 零個或多個標(biāo)題行 + CRLF

  • 一個空白行,即一個 CRLF

  • 一個可選的消息主體,如文件、查詢數(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)。

以下 HTTP 狀態(tài)碼以及可能從 Web 服務(wù)器返回的相關(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 在以前的版本中使用該代碼。現(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 在請求送達(dá)之前,您必須使用代理服務(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)碼實例:

下述例子將發(fā)送 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);
  }
}

現(xiàn)在調(diào)用上述 servlet 會顯示如下所示結(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

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號