本文內容大多參考《圖解HTTP》一書
1. 什么是狀態(tài)碼蔗牡?
當我們向服務端發(fā)送請求的時候,為了讓用戶更好的理解返回結果嗅剖,通常要借助狀態(tài)碼來通知用戶服務器端是正常處理了請求辩越,還是出現(xiàn)了偏差。
狀態(tài)碼如200 OK信粮,以3 位數(shù)字和原因短語組成黔攒。
數(shù)字中的第一位指定了響應類別,后兩位無分類强缘。響應類別有以下5 種督惰。
狀態(tài)碼數(shù)量繁多,實際經常使用只有14多種欺旧,下面只介紹一下具有代表性的14 個狀態(tài)碼姑丑。
2. 2XX 成功
2XX 的響應結果表明請求被正常處理了。
2.1 200 OK
表示從客戶端發(fā)來的請求在服務器端被正常處理了辞友。
2.2 204 No Content
該狀態(tài)碼代表服務器接收的請求已成功處理栅哀,但在返回的響應報文中不含實體的主體部分。另外称龙,也不允許返回任何實體的主體留拾。比如,當從瀏覽器發(fā)出請求處理后鲫尊,返回204 響應痴柔,那么瀏覽器顯示的頁面不發(fā)生更新。
一般在只需要從客戶端往服務器發(fā)送信息疫向,而對客戶端不需要發(fā)送新信息內容的情況下使用咳蔚。
2.3 206 Partial Content
該狀態(tài)碼表示客戶端進行了范圍請求豪嚎,而服務器成功執(zhí)行了這部分的GET 請求。響應報文中包含由Content-Range 指定范圍的實體內容谈火。
3. 3XX重定向
3XX 響應結果表明瀏覽器需要執(zhí)行某些特殊的處理以正確處理請求侈询。
3.1 301 Moved Permanently
永久性重定向。該狀態(tài)碼表示請求的資源已被分配了新的URI糯耍,以后應使用資源現(xiàn)在所指的URI扔字。
3.2 302 Found
臨時性重定向。該狀態(tài)碼表示請求的資源已被分配了新的URI温技,希望用戶(本次)能使用新的URI 訪問革为。
和301 Moved Permanently 狀態(tài)碼相似,但302 狀態(tài)碼代表的資源不是被永久移動舵鳞,只是臨時性質的震檩。換句話說,已移動的資源對應的URI 將來還有可能發(fā)生改變系任。
3.3 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)碼挂据。雖然302 Found 狀態(tài)碼也可以實現(xiàn)相同的功能,但這里使用303 狀態(tài)碼是最理想的儿普。
3.4 304 Not Modified
該狀態(tài)碼表示客戶端發(fā)送附帶條件的請求時崎逃,服務器端允許請求訪問資源,但未滿足條件的情況眉孩。304 狀態(tài)碼返回時个绍,不包含任何響應的主體部分。304 雖然被劃分在3XX 類別中浪汪,但是和重定向沒有關系巴柿。
3.5 307 Temporary Redirect
臨時重定向。該狀態(tài)碼與302 Found 有著相同的含義死遭。盡管302 標準禁止POST 變換成GET广恢,但實際使用時大家并不遵守。
307 會遵照瀏覽器標準呀潭,不會從POST 變成GET钉迷。但是至非,對于處理響應時的行為,每種瀏覽器有可能出現(xiàn)不同的情況糠聪。
4 4XX 客戶端錯誤
4XX 的響應結果表明客戶端是發(fā)生錯誤的原因所在荒椭。
4.1 400 Bad Request
該狀態(tài)碼表示請求報文中存在語法錯誤。當錯誤發(fā)生時枷颊,需修改請求的內容后再次發(fā)送請求戳杀。另外,瀏覽器會像200 OK 一樣對待該狀態(tài)碼夭苗。
4.2 401 Unauthorized
該狀態(tài)碼表示發(fā)送的請求需要有通過HTTP 認證(BASIC 認證信卡、DIGEST 認證)的認證信息。另外若之前已進行過1 次請求题造,則表示用戶認證失敗傍菇。
返回含有401 的響應必須包含一個適用于被請求資源的WWWAuthenticate首部用以質詢(challenge)用戶信息。當瀏覽器初次接收到401 響應界赔,會彈出認證用的對話窗口丢习。
4.3 403 Forbidden
該狀態(tài)碼表明對請求資源的訪問被服務器拒絕了。服務器端沒有必要給出拒絕的詳細理由淮悼,但如果想作說明的話咐低,可以在實體的主體部分對原因進行描述,這樣就能讓用戶看到了袜腥。
未獲得文件系統(tǒng)的訪問授權见擦,訪問權限出現(xiàn)某些問題(從未授權的發(fā)送源IP 地址試圖訪問)等列舉的情況都可能是發(fā)生403 的原因。
4.4 404 Not Found
該狀態(tài)碼表明服務器上無法找到請求的資源羹令。除此之外鲤屡,也可以在服務器端拒絕請求且不想說明理由時使用。
5. 5XX服務器錯誤
5XX 的響應結果表明服務器本身發(fā)生錯誤福侈。
5.1 500 Internal Server Error
該狀態(tài)碼表明服務器端在執(zhí)行請求時發(fā)生了錯誤酒来。也有可能是Web應用存在的bug 或某些臨時的故障。
5.2 503 Service Unavailable
該狀態(tài)碼表明服務器暫時處于超負載或正在進行停機維護肪凛,現(xiàn)在無法處理請求堰汉。如果事先得知解除以上狀況需要的時間,最好寫入Retry-After 首部字段再返回給客戶端显拜。