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 Othe
r 和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 首部字段再返回給客戶端。