圖解http學習筆記4.返回結果的HTTP狀態碼

返回結果的HTTP狀態碼

[狀態碼告知從服務器端返回的請求結果]

狀態碼的職責是當客戶端發送請求時,描述返回的請求結果。藉助狀態碼,用戶可以知道具體信息。

狀態碼如200 OK,三位數字+原因短語

數字 第一位:響應類型

類別 原因短語
1XX Informational(信息性)
2XX Success(成功)
3XX Redirection(重定向)
4XX Client Error(客戶端錯誤)
5XX Server Error(服務器錯誤)

只要遵守狀態碼類別的含義,改變定義的狀態碼或這自行創建狀態碼都可以。

[2XX成功]

[200 OK]

從客戶端發來的請求被正常處理。

在響應報文中,隨狀態碼一起返回的信息會因方法的不同而發生改變。

GET方法響應返回的是請求資源的實體。

HEAD方法響應返回的是請求資源的實體首部。

[204 No Content]

表示服務器接收的請求已成功處理,但返回的響應報文中不含實體的主體部分,也不允許返回任何實體的主體。

瀏覽器發出請求後,返回204響應,瀏覽器顯示的頁面不會更新。

在只需客戶端發送消息而不需要接受新消息內容的情況下使用。

[206 Partial Content]

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

[3XX 重定向]

[301 Moved Permanently]

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

資源路徑忘記添加/就會產生301狀態碼

http://example.com/sample

[302Found]

臨時性重定向。該狀態碼錶示請求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問。

和301Moved Permanently狀態碼相似,但302只是臨時性質。已移動的資源對應的URI將來還有可能發生改變。

用戶把URI保存成書籤,但不會像301那樣更新書籤,而是仍舊保留返回302狀態碼對應的URI.

[303 See Other]

表示由於請求對應的資源存在着另一個URI,應使用GET方法定向獲取請求資源。

303和302Found有相同的功能,但303明確表明了客戶端應該採用GET方法獲取資源。

使用POST方法訪問CGI(通用網關接口)程序,其執行後的處理結果是希望客戶端能以GET方法重定向到另一個URI上去,返回303See Other。

當301,302,303響應狀態碼返回時,幾乎所有的瀏覽器都會把POST改成GET,並刪除請求報文內的主體,之後請求自動再次發送

301、302標準是靜止將POST方法變成GET方法,但實際使用大家都這麼做。。。

[304 Not Modified]

表示客戶端發送附帶條件的請求時,服務器允許請求訪問資源,但未滿足條件的情況。304狀態碼返回時,不包含任何響應的主體部分。和重定向無多大關係。

[307 Temporary Redirect]

臨時重定向。與302Found有相同的含義。

307會遵守瀏覽器規則,不會從POST變成GET。但對於處理響應時的行爲,每種瀏覽器都有可能出現不同的情況。

[4XX 客戶端錯誤]

[400 Bad Request]

表示請求報文中存在語法錯誤。錯誤發生時,需修改請求的內容再次發送請求。

瀏覽器會像200 OK一樣對待該狀態碼

[401 Unauthorized]

該狀態碼錶示發送的請求需要有通過HTTP認證(BASIC認證、DIGEST認證)的認證消息。另外若之前已經進行過1次請求,則表示用戶認證失敗。

返回401的響應必須包含一個適用於被請求資源的WWW-Authenticate首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到401響應,會彈出認證用的對話窗口。

[403 Forbidden]

該狀態碼錶明對請求資源的訪問被服務器拒絕了。

未獲得文件系統的訪問授權,訪問權限出現某些問題(從未授權的發送源IP地址試圖訪問)等列舉的情況都可能發生403原因。

[404 Not Found]

該狀態碼錶明服務器上無法找到請求的資源。

也有可能是服務器拒絕請求且不想說明理由時使用。

[5XX 服務器錯誤]

[500 Internal Server Error]

表明服務器端執行請求時發生了錯誤。

可能是Web應用存在的bug或者某些臨時的故障。

[503 Service Unavailable]

表明服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。

如果事先得知解除以上狀況所需時間,最好寫入Retry-After首部字段再返回給客戶端。


狀態碼和狀態不一致

不少返回的狀態碼響應都是錯誤的。。。只是用戶沒有察覺。。。。。

比如Web應用程序內部錯誤,狀態碼依然是200OK。。。這種情況很多見。

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