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