1.HTTP狀態碼

狀態碼的職責是當客戶端向伺服器端發送請求時,描述返回的請求結果。藉助狀態碼,用戶可以知道伺服器端是正常處理了請求,還是出現了錯誤。注意,狀態碼是服務端向客戶端發送的反映響應結果的標識碼。下面是常見的幾種狀態碼:

2. 100~199 信息性狀態碼

  • 100 Continue:客戶端想向伺服器發送實體,但不確定伺服器能不能接受,所以首先會向伺服器發送一個攜帶了100 continueExcept,伺服器受到這個請求之後如果能接收客戶端發來的實體,那就返回一個100 Continue響應,如果不能就返回一個錯誤碼。
  • 101 Switching Protocols:伺服器正在根據客戶端的指定,將協議切換成Update首部所列的協議。

3. 200~299 成功

伺服器有一組用來表示成功的狀態碼,分別對應於不同類型的請求。

  • 200 OK:從客戶端發來的請求在伺服器端被正常處理了,實體的主體部分包含了所請求的資源。
  • 201 Created:用於創建伺服器對象的請求(比如:PUT),響應的實體主體部分中應該包含各種引用了已經創建好的資源的URL,Location首部包含的則是具體的引用。
  • 202 Accepted:請求已經被接收,但伺服器還沒有執行任何操作。並不意味著伺服器會完成這個請求。
  • 203 Non-Authoritative-Information:實體首部包含的信息不是來自於源端伺服器,而是來自資源的一份副本
  • **204 No Content:伺服器成功處理了請求,但沒有返回任何內容。主要用於在瀏覽器不轉為顯示新文檔的情況下,對其進行更新(比如刷新表單頁面)。
  • 205 Reset Content:用於瀏覽器的代碼,告訴瀏覽器清除當前頁面中所有HTML表單元素。
  • **206 Partial Content:成功執行了一個部分或者Range請求,因為客戶端可以通過一些特殊的首部來獲取部分或者範圍內的文檔。響應報文中包含由 Content-Range 指定範圍的實體內容。

4. 300~399 重定向

重定向狀態碼要麼告訴客戶端使用代替位置來訪問他們所感興趣的資源,要麼就提供一個替代的響應而不是資源的內容。如果資源已被移動,可以發送一個重定向狀態碼和一個可選的Location首部來告知客戶端資源已被移走。以及現在可以在那裡找到它。這樣瀏覽器就可以自己轉向新的位置了。

  • 300 Multiple Choise:客戶端請求一個世紀指向多個資源的URL時會返回這個狀態碼,比如伺服器上有某個HTML文檔的英語和發育版本,返回這個狀態碼時會有一個選項列表,這樣客戶端就可以選擇了。
  • 301 Moved Permanently:永久性重定向。該狀態碼錶示請求的資源已被分配了新的 URI(該URL存在Location首部中),以後應使用資源現在所指的 URI。
  • 302 Found:臨時性重定向。該狀態碼錶示請求的資源已被分配了新的 URI(該URL存在Location首部中),希望用戶(本次)能使用新的 URL 訪問,將來的請求還應使用老的URL。注意:剛開始客戶端發送POST請求,在收到302狀態碼後,使用GET請求訪問新給的URL。在HTTP1.0生效。
  • 303 See Other:告知客戶端應該用另一個URL(該URL存在Location首部中)來獲取資源,其主要目的是允許POST請求的響應將客戶端定向到某個資源上去。在HTTP1.1生效。
  • 304 Not Modified:此狀態碼適用於客戶端發送了一個有條件的請求( If-Match,If-ModifiedSince,If-None-Match,If-Range,If-Unmodified-Since )。比如客戶端想獲取某個資源,並且是在XXX時間修改過的新的資源,如果這個資源沒有修改,服務端就返回304給客戶端。
  • 305 Use Proxy:用來告訴客戶端必須通過一個代理來訪問資源,代理的位置在Location裏。
  • 306:還沒用這個狀態碼
  • 307 Temporary Redirect:臨時重定向。該狀態碼與 302 Found 有著相同的含義。307 會遵照瀏覽器標準,不會從 POST 變成 GET。

5. 400~499 客戶端錯誤

4XX 的響應結果表明客戶端是發生錯誤的原因所在。但很多4xx錯誤都被瀏覽器解決了,所以用戶經常看到的也就是404了。

  • 400 Bad Request:該狀態碼錶示請求報文中存在語法錯誤。
  • 401 Unauthorized:告訴客戶端,要想獲取資源的訪問權,首先要對自己認證。
  • 402 Payment Required:此狀態碼還未被使用,保留中。
  • 403 Forbidden:表明伺服器拒絕了這個來自客戶端的請求。一般不會說明緣由。
  • 404 Not Found:表明伺服器上無法找到請求的資源。一般還會包含一個實體(比如404頁面),以便客戶端給用戶看。
  • 405 Method Not Allowed:客戶端發起的請求中帶有所有請求的URL不支持的方法。同時應該在響應中包含Allow首部,以告訴客戶端可以使用什麼方法。
  • 406 Not Accepted:客戶端可以在請求首部中指明自己願意接收什麼類型的實體,但是當伺服器沒有這種類型實體的時候,會發送406.
  • 407 proxy Authentication Required:與401類似,但是用於要求對資源進行認證的代理伺服器。
  • 408 Request TImeout:如果客戶端完成請求所話的時間太長,伺服器返回此代碼並關閉連接。
  • 409 Conflict:用於說明請求可能在資源上引發一些衝突。伺服器擔心請求會引發衝突時,發送此代碼。並在響應的主體中描述衝突。
  • 410 Gone:與404類似,只是伺服器曾經擁有過此資源。
  • 411 Length Required:伺服器要求客戶端發請求的時候包含Content-Length首部的時候發送此代碼。
  • 412 Precondition Failed:客戶端發起了條件請求,且其中一個條件失敗了的時候會收到此狀態碼。
  • 413 Request Entity Too large:客戶端發送的實體主體比伺服器所能希望處理的要大時,使用此代碼。
  • 414 Request URL Too Long:客戶端發送的請求URL比伺服器所能希望處理的要長時,使用此代碼。
  • 415 Unsupported Media Type:伺服器無法理解或無法支持客戶端所發實體內容類型時,使用此狀態碼。
  • 416 Request Range Not Satisfiable:請求報文所請求的是指定資源的某個範圍,而此範圍無效或者無法滿足時,使用此狀態碼
  • 417 Expectation Failed:請求的Expect請求首部包含了一個期望,但是伺服器無法滿足此期望時,使用此狀態碼。

6. 500~599 伺服器錯誤

5XX 的響應結果表明伺服器本身發生錯誤。

  • 500 Internal Server Error:該狀態碼錶明伺服器端在執行請求時遇到了一個妨礙它為請求提供服務的錯誤,也有可能是 Web 應用存在的 bug 或某些臨時的故障。
  • 501 Not Implemented:客戶端發起的請求超出伺服器的能力範圍(比如使用了伺服器不支持的請求方法)
  • 502 Bad Gateway:作為代理或網關使用的伺服器從請求響應鏈的下一條鏈路上受到了一條偽響應(比如,它無法連接到其他父網關)時,使用此碼。
  • 503 Service Unavailable:該狀態碼錶明伺服器暫時處於超負載或正在進行停機維護,現在無法處理請求,但是將來可以。如果伺服器知道什麼時候能回復,可以在響應首部中添加Retry-After
  • 504 Gateway Timeout:與408類似,只是這裡的響應來自一個網關或者代理,他們等待另一個伺服器對齊請求進行響應超時了。
  • 505 HTTP Version Not Supported:伺服器收的請求使用了它無法或者不願支持的協議版本時,使用此狀態碼。

資料來源:《HTTP權威指南》第3.4節

推薦閱讀:

相關文章