1. 程式人生 > >HTTP協議04-返回狀態碼

HTTP協議04-返回狀態碼

authorize 處理 forbidden 常用 狀態碼 edi redirect post 緩存

狀態碼職責是在客戶端向服務器端發送請求時候,描述返回的請求結果。借助狀態碼,用戶可以知道服務器是否正常處理了請求,還是出錯了。

狀態碼的類別

類別 原因短語
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-返回狀態碼