《图解HTTP》读书笔记--第4章返回结果的HTTP状态码
寫在前面:本文僅供個人學習使用,如有侵權,請聯系刪除。文章中所用圖片絕大多數來源于《圖解HTTP》,請讀者支持原版。
文章目錄
- 4.1狀態碼告知從服務器端返回的請求結果
- 4.2 2xx成功
- 4.2.1 200 OK
- 4.2.2 204 No Content
- 4.2.3 206 Partial Content
- 4.3 3xx重定向
- 4.3.1 301 Moved Permanently
- 4.3.2 302 Found
- 4.3.3 303 See Other
- 4.3.4 304 Not Modified
- 4.3.5 307 Temporary Redirect
- 4.4 4xx客戶端錯誤
- 4.4.1 400 Bad Request
- 4.4.2 401 Unauthorized
- 4.4.3 403 Forbidden
- 4.4.4 404 Not Found
- 4.5 5xx 服務器錯誤
- 4.5.1 500 Internal Server Error
- 4.5.2 503 Service Unavailable
HTTP狀態碼負責表示客戶端HTTP請求的返回結果、標記服務器端的處理是否正常、通知出現的錯誤等工作。讓我們通過本章的學習,好好了解一下狀態碼的工作機制。
4.1狀態碼告知從服務器端返回的請求結果
狀態碼的職責是當客戶端向服務器端發送請求時,描述返回的請求結果。借助狀態碼,用戶可以知道服務器端是正常處理了請求,還是出現了錯誤。
狀態碼如 200 OK,以3位數字和原因短語組成。
數字中的第一位指定了響應類別,后兩位無分類。響應類別有以下5種。
| 1xx | Informational(信息性狀態碼) | 接收的請求正在處理 |
| 2xx | Success(成功狀態碼) | 請求正常處理完畢 |
| 3xx | Redirection(重定向狀態碼) | 需要進行附加操作以完成請求 |
| 4xx | Client Error(客戶端錯誤狀態碼) | 服務器無法處理請求 |
| 5xx | Serfer Error(服務器錯誤狀態碼) | 服務器處理請求出錯 |
實際上經常使用的大概只有14種。接下來,我們就介紹一下這些具有代表性的14個狀態碼。
4.2 2xx成功
2xx的響應結果表明請求被正常處理了。
4.2.1 200 OK
表示從客戶端發來的請求在服務器端被正常處理了。
在響應報文內,隨狀態碼一起返回的信息會因方法的不同而發生改變。 比如,使用GET方法時,對應請求資源的實體會作為響應返回。而使用HEAD方法時,對應請求資源的實體主體不隨報文首部作為響應返回(即在響應中只返回首部,不會返回實體的主體部分).
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狀態碼。
http://example.com/sample4.3.2 302 Found
臨時性重定向。該狀態碼表示請求的資源已被分配了新的URI,希望用戶(本次)能使用新的URI訪問。
和301 Moved Permanently 狀態碼相似,但302狀態碼代表的資源不是被永久移動,只是臨時性質的。換句話說,已移動的資源對應的URI將來還有可能發生改變。比如,用戶把URI保存成書簽,但不會像301狀態碼出現時那樣去更新書簽,而是仍舊保留返回302狀態碼的頁面對應的URI。
4.3.3 303 See Other
該狀態碼表示由于請求對應的資源存放著另一個URI,應使用GET方法定向獲取請求的資源。
303狀態碼和302 Found 狀態碼有著相同的功能,但303狀態碼明確表示客戶端應該采用GET方法獲取資源,這點與302狀態碼有區別。
比如,當使用POST方法訪問CGI程序,其執行后的處理結果是希望客戶端能以GET方法重定向到另一個URI上去時,返回303狀態碼。雖然302Found 狀態碼也可以實現相同的功能,但這里使用303狀態碼是最理想的。
注:當使用301、302、303響應狀態碼返回時,幾乎所有的瀏覽器都會把POST改成GET,并刪除請求報文內的主體,之后請求會自動再次發送。
301、302標準是禁止將POST方法改變成GET方法的,但實際使用時大家都會這么做。
4.3.4 304 Not Modified
該狀態碼表示客戶端發送附帶條件的請求時,服務器端允許請求訪問資源,但因發生請求未滿足條件的情況后,直接返回304 Not Modified(服務器端資源未改變,可直接使用客戶端未過期的緩存)。304狀態碼返回時,不包含任何響應的主體部分。304雖然被劃分在3xx類別中,但是和重定向沒有關系。
4.3.5 307 Temporary Redirect
臨時重定向。該狀態碼與302 Found 有著相同的含義。307會遵循瀏覽器標準,不會從POST變成GET。但是,對于處理響應時的行為,每種瀏覽器有可能出現不同的情況。
4.4 4xx客戶端錯誤
4xx的響應結果表明客戶端是發生錯誤的原因所在。
4.4.1 400 Bad Request
該狀態碼表示請求報文中存在語法錯誤。當錯誤發生時,需修改請求的內容后再次發送請求。
4.4.2 401 Unauthorized
該狀態碼表示發送的請求需要有通過HTTP認證(BASIC認證\DIGEST認證)的認證信息。另外若之前已進行過1次請求,則表示用戶認證失敗。
返回含401的響應必須包含一個適用于被請求資源的WWW-Authenticate首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到401響應,會彈出認證用的對話窗口。
4.4.3 403 Forbidden
該狀態碼表明對請求資源的訪問被服務器拒絕了。服務器端沒有必要給出拒絕的詳細理由,但如果想做說明的話,可以在實體的主體部分對原因進行描述,這樣就能讓用戶看到了。
未獲得文件系統的訪問授權,訪問權限出現某些問題(從未授權的發送源IP地址試圖訪問)等列舉的情況都可能是發生403的原因。
4.4.4 404 Not Found
該狀態碼表示服務器上無法找到請求的資源。除此之外,也可以在服務器端拒絕請求且不想說明理由時使用。
4.5 5xx 服務器錯誤
5xx的響應結果表明服務器本身發生錯誤。
4.5.1 500 Internal Server Error
該狀態碼表明服務器端在執行請求時發生了錯誤。也可能是Web應用存在的bug或某些臨時的故障。
4.5.2 503 Service Unavailable
該狀態碼表明服務器暫時處于超負載或正在進行停機維護,現在無法處理請求。如果事先得知解除以上狀況需要的時間,最好寫入Retry-After首部字段再返回給客戶端。
注:狀態碼與狀態的不一致:不少返回的狀態碼響應都是錯誤的,但是用戶可能察覺不到這點。比如Web應用程序內部發生錯誤,狀態碼依然返回200 OK,這種情況也經常碰到。
總結
以上是生活随笔為你收集整理的《图解HTTP》读书笔记--第4章返回结果的HTTP状态码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《图解HTTP》读书笔记--第3章HTT
- 下一篇: GRE词汇乱序版-夹生的词汇3