HTTP協議圖--HTTP 響應狀態碼(重點分析)

1. 狀態碼概述

  • HTTP 狀態碼負責表示客戶端 HTTP 請求的返回結果、標記服務器端的處理是否正常、通知出現的錯誤等工作。
  • HTTP 狀態碼如 200 OK ,以 3 位數字和原因短語組成。數字中的第一位指定了響應類別,後兩位無分類。
  • 不少返回的響應狀態碼都是錯誤的,但是用戶可能察覺不到這點。比如 Web 應用程序內部發生錯誤,狀態碼依然返回 200 OK

2. 狀態碼類別

  類別 原因短語
1xx Informational(信息性狀態碼) 接收的請求正在處理
2xx Success(成功狀態碼) 請求正常處理完畢
3xx Redirection(重定向狀態碼) 需要進行附加操作以完成請求
4xx Client Error(客戶端錯誤狀態碼) 服務器無法處理請求
5xx Server Error(服務器錯誤狀態碼) 服務器處理請求出錯

我們可以自行改變 RFC2616 中定義的狀態碼或者服務器端自行創建狀態碼,只要遵守狀態碼的類別定義就可以了。

3. 常用狀態碼解析

HTTP 狀態碼種類繁多,數量達幾十種。其中最常用的有以下 14 種,一起來看看。

3.1 200 OK

表示從客戶端發來的請求在服務器端被正常處理了。

3.2 204 No Content

  • 代表服務器接收的請求已成功處理,但在返回的響應報文中不含實體的主體部分。另外,也不允許返回任何實體的主體。
  • 一般在只需要從客戶端向服務器端發送消息,而服務器端不需要向客戶端發送新消息內容的情況下使用。

3.3 206 Partial Content

表示客戶端進行了範圍請求,而服務器成功執行了這部分的 GET 請求。響應報文中包含由 Content-Range 首部字段指定範圍的實體內容。

3.4 301 Moved Permanently

永久性重定向。表示請求的資源已被分配了新的 URI。以後應使用資源現在所指的 URI。也就是說,如果已經把資源對應的 URI 保存爲書籤了,這時應該按 Location 首部字段提示的 URI 重新保存。

3.5 302 Found

  • 臨時性重定向。表示請求的資源已被分配了新的 URI,希望用戶(本次)能使用新的 URI 訪問。
  • 和 301 Moved Permanently 狀態碼相似,但 302 Found 狀態碼代表資源不是被永久移動,只是臨時性質的。換句話說,已移動的資源對應的 URI 將來還有可能發生改變。

3.6 303 See Other

  • 表示由於請求的資源存在着另一個 URI,應使用 GET 方法定向獲取請求的資源。
  • 303 See Other 和 302 Found 狀態碼有着相同的功能,但 303 See Other 狀態碼明確表示客戶端應採用 GET 方法獲取資源,這點與 302 Found 狀態碼有區別。

3.7 304 Not Modified

  • 表示客戶端發送附帶條件的請求時,服務器端允許請求訪問的資源,但未滿足條件的情況。
  • 304 Not Modified 狀態碼返回時,不包含任何響應的主體部分。
  • 304 Not Modified 雖然被劃分到 3xx 類別中,但和重定向沒有關係。

3.8 307 Temporary Redirect

臨時重定向。該狀態碼與 302 Found 有着相同的含義。

3.9 400 Bad Request

  • 表示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容後再次發送請求。
  • 另外,瀏覽器會像 200 OK 一樣對待該狀態碼。

3.10 401 Unauthorized

  • 表示發送的請求需要有通過 HTTP 認證(BASIC 認證、DIGEST 認證)的認證信息。
  • 另外,若之前已進行過 1 次請求,則表示用戶認證失敗。
  • 返回含有 401 Unauthorized 的響應必須包含一個適用於被請求資源的 WWW-Authenticate 首部用以質詢(challenge)用戶信息。

3.11 403 Forbidden

表明對請求資源的訪問被服務器拒絕了。服務器端沒有必要給出詳細的拒絕理由,當然也可以在響應報文的實體主體部分對原因進行描述。

3.12 404 Not Found

表明服務器上無法找到請求的資源。除此之外,也可以在服務器端拒絕請求且不想說明理由的時候使用。

3.13 500 Internal Server Error

表明服務器端在執行請求時發生了錯誤。也可能是 Web 應用存在的 bug 或某些臨時的故障。

3.14 503 Service Unavailable

表明服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。如果事先得知解除以上狀況需要的時間,最好寫入 Retry-After 首部字段再返回給客戶端。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章