圖解HTTP協議 第4章 返回結果的HTTP狀態碼學習筆記

4.1狀態碼告知從服務器端返回的請求結果
狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。藉助狀態碼,用戶可以知道服務器端是否正常處理了請求,還是出現了錯誤。
狀態碼如200 OK,以3位數字和原因短語組成
數字中第一位指定了響應類別,後兩位無分類。響應類別有以下5種。
1XX Information(信息性狀態碼)  接收的請求正在處理
2XX Success(成功狀態碼) 請求處理完畢
3XX Redirection(重定向狀態碼) 需要進行附加操作以完成請求
4XX Client Error (客戶端錯誤狀態碼 ) 服務器無法處理請求
5XX Server Error (服務器錯誤狀態碼) 服務器處理請求出錯

實際上經常使用的只有14種狀態碼

4.2 2XX 成功
2XX的響應結果表明請求被正常處理了
4.2.1 200 OK
表示從客戶端發送來的請求在服務器端被正常處理了
在響應報文內,隨狀態碼一起返回的信息會因爲方法不同而改變。
4.2.2 204 No Content
該狀態碼代表服務器接收的請求已經成功處理,但是在返回的響應報文中不含有實體的主體部分。另外,也不允許返回任何實體的主體。比如,當從瀏覽器發出請求處理後,返回204響應,那麼瀏覽器顯示的頁面不發生更新。
一般在只需要從客戶端往服務器發送信息,而對客戶端不需要發送新信息內容的情況下使用。
4.2.3 206 Partial Content
該狀態碼錶示客戶端進行了範圍請求,而服務器成功執行了這部分的GET請求。響應報文中包含由Content-Range指定範圍的實體內容。
4.3 3XX 重定向
3XX響應結果表明瀏覽器需要執行某些特殊的處理以正確處理請求。
4.3.1 301 Moved Permanently
永久性重定向。該狀態碼錶示請求的資源已經被分配了新的URI,以後應使用資源現在所指的URI。也就是說,如果已經把資源對應的URI保存爲書籤了,這時應該按照Location首部字段提示的URI重新保存。
像下方給出的請求URI,當指定資源路徑的最後忘記添加斜槓“/”,就會產生301狀態碼
4.3.2 302 Found
臨時重定向。該狀態碼錶示請求的資源已經被分配了新的URI,希望用戶(本次)能使用新的URI訪問。
4.3.3 303 See Other
該狀態碼錶示由於請求對應資源存在着另一個URI,應使用GET方法定向獲取請求的資源。
303狀態碼和302Found狀態碼有着相同的功能,但是303狀態碼明確表示客戶端應當採用GET方法獲取資源,這點與302狀態碼不同。

注:
當301,302,303響應狀態碼返回時,幾乎所有的瀏覽器都會把POST改成GET,並刪除請求報文內的主體,之後請求會自動再次發送。
301,302標準是禁止將POST方法改變成GET方法的,但實際應用時大家都會這麼做。
4.3.4 304 Not Modified
該狀態碼錶示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但未滿足條件的情況。
304狀態碼返回時,不包含任何響應的主體部分。304雖然被劃分在3XX類別中,但是和重定向沒有關係。
4.3.4 307 Temporary Redirect
臨時重定向。該狀態碼與302Found有着相同的含義。儘管302標準禁止POST方法變換成GET,但實際應用時大家並不遵守。
307會遵照瀏覽器標準,不會從POST變成GET。但是,對於處理響應時的行爲,每種瀏覽器有可能出現不同的情況。
4.4 4XX 客戶端錯誤
4XX的響應結果表明客戶端是發生錯誤的原因所在。
4.4.1 400 Bad Request
這個狀態碼錶示請求報文中存在語法錯誤。當錯誤發生時,需要修改請求的內容後再次發送請求。另外,瀏覽器會像200 OK一樣對待該狀態碼。
4.4.2 401 Unauthorized
該狀態碼錶示發送的請求需要有通過HTTP認證(BASIC認證,DIGEST認證)的認證信息。另外若之前已進行過一次請求,則表示用戶認證失敗。
返回401的響應必須包含一個適用於被請求資源的WWW—Authenticate首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到401響應,會彈出認證用的對話窗口。
4.4.3 403 Forbidden
該狀態碼錶明對請求資源的訪問被服務器拒絕了。服務器端沒有必要給出拒絕的詳細理由,但如果想做說明的話,可以在實體的主體部分對原因進行描述,這樣就能讓用戶看到了。
未獲得文件系統的訪問授權,訪問權限出現了某些問題(從未授權的發送源IP地址試圖訪問)等列舉情況都可能是發生403錯誤的原因。
4.4.4 404Not Found
該狀態碼錶明服務器上無法找到請求的資源。除此之外,也可以在服務器端拒絕請求且不想說明理由時使用。
4.5 5XX服務器錯誤
5XX的響應結果表明服務器本身發生錯誤。
4.5.1 500 Internal Server Error
該狀態碼錶明服務器端在執行請求時發生了錯誤。也有可能是Web應用存在Bug或者某些臨時故障。
5.5.2 503 Service Unavailable 
該狀態碼錶明服務器暫時處於超負載或正在進行停機維護,現在無法處理請求。如果事先得知解除以上狀況的時間,最好寫入Retry-After首部字段再返回給客戶端。
注:狀態碼和狀況不一樣
不少返回的狀態碼響應都是錯誤的,但是用戶可能察覺不到這一點。
 


發佈了12 篇原創文章 · 獲贊 40 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章