HTTP協議04-返回狀態碼
狀態碼職責是在客戶端向服務器端發送請求時候,描述返回的請求結果。借助狀態碼,用戶可以知道服務器是否正常處理了請求,還是出錯了。
狀態碼的類別
類別 | 原因短語 | |
1XX | Informational(信息性狀態碼) | 接受的請求正在處理 |
2XX | Success(成功狀態碼) | 請求正常處理完畢 |
3XX | Redirection(重定向狀態碼) | 需要進行附加操作以完成請求 |
4XX | Client Error(客戶端錯誤狀態碼) | 服務器無法處理請求 |
5XX | Server Error(服務器錯誤狀態碼) | 服務器處理請求出錯 |
http雖然各種狀態碼加起來有60多種,但是常用的只有14種。
1)2xx成功 請求被正常處理
1.1 200 OK
表示從客戶端發來的請求被服務器端正常處理了。
1.2 204 NO Content
表示從客戶端發來的請求被服務器端正常處理,但是沒有資源可返回,也就是響應報文中包含實體的主體部分。也不允許返回任何實體的主體,一般在只需要從客戶端向服務器端發送信息,而對客戶端不需要發送新消息內容的情況下使用,瀏覽器顯示的頁面不會發生更新。
1.3 206 Partial Content
該狀態碼表示客戶端進行範圍請求,而服務器成功執行了這部分的GET請求。響應報文中包含由Content-Range指定範圍的實體內容
2)3XX重定向 服務器需要執行某些特殊的處理以正確處理請求
2.1 301 Moved Permanently
永久性重定向。該狀態碼表示請求的資源已被分配了新的URI,以後應使用資源現在所指的URI。
2.2 302 Found
臨時性重定向。該狀態碼表示請求的資源已臨時分配了新的URI,希望用戶本次使用新的URI訪問。
2.3 303 See Other
該狀態碼表示由於請求對應的資源存在著另一個URI,應使用GET方法定向獲取請求的資源。
303和302有著相似的功能,但是303狀態碼明確表示客戶端應當采用GET方法獲取資源
ps:當301、302、303響應狀態碼返回時,幾乎所有瀏覽器都會把POST改成GET,並刪除請求報文內的主體,然後再次自動發起請求。301和302標準是禁止講POST方法改成GET方法的,但實際使用時大家都這麽做- -
2.4 304 Not Modified
改狀態碼表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但因發生請求未滿足條件的情況後,直接返回304 Not Modified(服務器端資源未改變,可直接使用客戶端未過期的緩存),返回時不包含任何響應的主體部分。
附帶條件的請求:是指使用GET方法請求報文中包含If-...開頭的任一首部字段。
2.5 307 Temporary Redirect
臨時重定向。和302有著相同的含義。307會遵照瀏覽器的標準,不會從POST變為GET。但是,對於處理響應時的行為,每種瀏覽器有可能出現不同的情況。
3)4XX客戶端錯誤 表示客戶端是發生錯誤的原因所在
3.1 400 Bad Request
該狀態表示請求的報文中存在語法錯誤。當錯誤發生時,需修改請的內容後再次發送請求。另外瀏覽器會像對待200一樣對待該狀態碼。
3.2 401 Unauthorized
該狀態碼表示發送的請求需要通過HTTP認證的認證信息。如果之前已進行一次請求,則表示用戶認證失敗。返回含有401的響應必須包含一個適用於被請求資源的www-Authenticate首部用以咨詢用戶信息。當瀏覽器初次接收到401響應,會彈出認證用的對話窗口。
3.3 403 Forbidden
該狀態碼表明對請求的資源的訪問被服務器拒絕了。(一般是訪問權限的問題)
3.4 404 Not Found
該狀態碼表示服務器上無法找到請求的資源。
4)5XX服務器錯誤 表示服務器本身發生錯誤
4.1 500 Internal Server Error
該狀態碼表明服務器在執行請求時發生了錯誤。可能是Web應用存在bug或臨時故障。
4.2 503 Service Unavailable
該狀態碼表明服務器暫時處於超負荷或正在進行停機維修,現在無法處理請求。
狀態碼和狀況的不一致
不少返回的狀態碼響應都是錯誤的,但是用戶可能察覺不到這點,比如Web應用程序內部發生錯誤,狀態碼依然返回200 Ok,這種情況也經常遇見。
HTTP協議04-返回狀態碼