前提
狀態(tài)碼的職責是當客戶端向服務器端發(fā)送請求的時候缓醋,描述返回的請求結果邑贴。借助狀態(tài)碼,用戶而已知道服務器端是正常處理了請求還是出現(xiàn)了故障宏蛉。
表1.1:狀態(tài)碼的類別
| | | 類別 | 原因短語 |
| :---: | :-----: | :-----: |
| 1XX | Informational(信息性狀態(tài)碼) | 接收的請求正在處理 |
| 2XX | Success(成功狀態(tài)碼) | 請求正常處理完畢 |
| 3XX | Redirection(重定向狀態(tài)碼) | 需要進行附加操作以完成請求 |
| 4XX | Client Error(客戶端錯誤狀態(tài)碼) |服務器無法處理請求 |
| 5XX | Server Error(服務器錯誤狀態(tài)碼) | 服務器處理請求出錯 |
只要遵守狀態(tài)碼類別的定義儿咱,及時改變RFC2616中定義的狀態(tài)碼纸镊,或服務器端自行創(chuàng)建狀態(tài)碼都沒問題
2XX 成功
2XX的響應結果表示請求被正常處理了
200 OK
表明從客戶端發(fā)來的請求在服務器端被正確處理了
在響應報文內,隨狀態(tài)碼一起返回的信息會因為方法的不通而發(fā)生改變概疆。比如使用GET方法時候逗威,對應請求資源的實體會作為響應返回;而是用HEAD方法時候,對應請求資源的實體主體不隨著報文首部作為響應返回(即在響應中只返回首部岔冀,不會返回實體的主體部分)
204 Not Content
該狀態(tài)碼代碼服務器接收的請求已經(jīng)成功處理凯旭,但在返回的響應報文中不含實體的主體部分。另外使套,也不允許返回任何實體的主體罐呼。比如當從游覽器發(fā)出請求處理后,返回204響應侦高,那么游覽器顯示的界面不發(fā)生更新嫉柴。
一般在只需要從客戶端往服務器發(fā)送消息,而對客戶端不需要發(fā)送新信息內容的情況下使用
206 Partial Content
該狀態(tài)碼表示客戶端進行了范圍請求奉呛,而服務器成功執(zhí)行了這部分的GET請求计螺,響應報文中包含由Content-Range指定范圍的實體內容
3XXX 重定向
3XX響應結果表明游覽器需要執(zhí)行某些特殊的處理以正確處理請求。
301 Moved Permanently
永久重定向瞧壮。該狀態(tài)碼表示請求的資源已經(jīng)被分配了新的URI登馒,以后應使用資源現(xiàn)在所指的URI。也就是說咆槽,如果已經(jīng)把資源對應的URI保存為數(shù)顯了陈轿,這時候應該按照Location首部字段提示的URI重新保存。
向下方給出的請求URI,當指定資源路徑的最后忘記添加斜杠"/"麦射,就會產(chǎn)生301裝填嗎
http://example.com/sample
302 Found
臨時重定向蛾娶。該狀態(tài)碼表示請求的資源已經(jīng)分配了新的URI,希望用戶(本次)能使用新的URI訪問潜秋。
和301 Moved Permanently狀態(tài)碼相似蛔琅,但是302狀態(tài)碼表示的資源不是被永久性移動,只是臨時性性質的半等。換句話說,已經(jīng)移動的資源對應的URI將來還有可能發(fā)生改變呐萨。比如杀饵,用戶把URI保存為書簽,但不會像301狀態(tài)碼出現(xiàn)時那樣去更新書簽谬擦,而是仍舊保留返回302狀態(tài)碼的頁面對應的URI切距。
303 See Other
該狀態(tài)碼表示由于請求對應的資源存在著另一個URI,應使用GET方法定向獲取請求的資源惨远。
303狀態(tài)碼和302 Found狀態(tài)碼有著相同的功能谜悟,但是303狀態(tài)碼明確的表示客戶端應當采用GET方法獲取資源,這點于302狀態(tài)碼有區(qū)別
比如北秽,當使用POST方法訪問CGI程序葡幸,其執(zhí)行后的處理結果是希望客戶端能以GET方法重定向到另一個URI上去,返回303狀態(tài)碼贺氓,雖然302Found狀態(tài)碼也可以實現(xiàn)相同的功能蔚叨,但是這里使用303狀態(tài)碼是最理想的
當301、302辙培、303響應狀態(tài)碼返回時蔑水,幾乎所有的游覽器都會把POST請求改成GET,并刪除請求報文內的主體扬蕊,之后請求會自動再次發(fā)送
301搀别、302標準是禁止講POST方法改變?yōu)镚ET方法的,但實際使用時候大家都會這么做
304 Not Modified
該狀態(tài)碼表示客戶端發(fā)送附帶條件的請求時候(附帶條件的請求是指采用GET方法的請求報文中包含If-Match尾抑、If-Modified-Since歇父、If-None-Match、If-Range再愈、If-Unmodified-Since中任一首部)服務器端允許請求訪問資源庶骄,但是因為發(fā)生請求為滿足條件的情況后,直接返回304 Not Modified(服務器端資源未改變践磅,可直接使用客戶端未過期的緩存)单刁。304狀態(tài)碼返回時,不包含任何響應的主體部分。304雖然被劃分在3XX類別中羔飞,但是和重定向沒有關系肺樟。
307 Temporary Redirect
臨時重定向。該狀態(tài)碼與302Found有著相同的含義逻淌。盡管302標準禁止POST變換成GET么伯,但是實際使用大家并不遵守。
307會遵守游覽器標準卡儒,不會從POST變成GET田柔,但是,對于處理響應時候的行為骨望,每種游覽器都有可能給出現(xiàn)不同的情況
4XX客戶端錯誤
4XX的響應結果表明客戶端是發(fā)生錯誤的原因所在
400 Bad Request
該狀態(tài)碼表示請求報文中存在語法錯誤硬爆。當錯誤發(fā)生時候,需修改請求的內容后再次發(fā)送請求擎鸠。另外缀磕,游覽器會像200 OK 一樣對待該狀態(tài)碼
402 Unauthorized
該狀態(tài)碼表示發(fā)送的請求需要通過HTTP認證(BASIC認證、DIGEST認證)的認證信息劣光。另外若之前已經(jīng)進行過1次請求袜蚕,則表示用戶認證失敗。
返回含有401的響應必須包含一個適用于被請求資源的WWW-Authenticate首部用以質詢(challenge)用戶信息绢涡。當游覽器初次接收到401響應牲剃,會彈出認證用的對話窗口
403 Forbidden
該狀態(tài)碼表明對請求資源的訪問被服務器拒絕了。服務器端沒有必要給出拒絕的詳細信息雄可,但如果想做說明的話颠黎,可以在實體的主體部分對原因進行描述,這樣就能讓用戶看到了滞项。
未獲得文件系統(tǒng)的訪問授權狭归,訪問權限出現(xiàn)某些問題(從未授權的發(fā)送源IP地址試圖訪問)等列舉的請情況都可能是發(fā)生403的原因。
404 Not Found
該狀態(tài)碼表明服務器上無法找到請求的資源文判。初次之外过椎,也可以在服務器端拒絕請求并且不想說明理由時候使用
5XX 服務器端錯誤
5XX的響應結果表明服務器本身發(fā)生錯誤
500 Internal Server Error
該狀態(tài)碼表明服務器在執(zhí)行請求時候發(fā)生了錯誤,也有可能是Web應用存在的bug或者某些臨時的故障
503 Service Unabailable
該狀態(tài)碼表明服務器暫時處于超負荷或者正在進行停機維護戏仓,現(xiàn)在無法處理請求疚宇。如果事先得知接觸以上狀況需要的時間,最好寫入Retry-After首部資源在返回給客戶端
狀態(tài)碼和狀況的不一致
不少返回的狀態(tài)碼響應都是錯誤的赏殃,但是用戶可能察覺不到這點敷待。比如Web應用程序內部發(fā)生錯誤,狀態(tài)碼亦然返回200 OK,這種情況也經(jīng)常遇到