200 – 服務(wù)器成功返回網(wǎng)頁 404 – 請求的網(wǎng)頁不存在 503 – 服務(wù)不可用
1xx(臨時響應(yīng))
表示臨時響應(yīng)并需要請求者繼續(xù)執(zhí)行操作的狀態(tài)代碼。
代碼 說明
100 (繼續(xù)) 請求者應(yīng)當(dāng)繼續(xù)提出請求。 服務(wù)器返回此代碼表示已收到請求的第一部分握础,正在等待其余部分延旧。
101 (切換協(xié)議) 請求者已要求服務(wù)器切換協(xié)議刽宪,服務(wù)器已確認(rèn)并準(zhǔn)備切換狈定。
2xx (成功)
表示成功處理了請求的狀態(tài)代碼。
代碼 說明
200 (成功) 服務(wù)器已成功處理了請求芜繁。 通常,這表示服務(wù)器提供了請求的網(wǎng)頁绒极。
201 (已創(chuàng)建) 請求成功并且服務(wù)器創(chuàng)建了新的資源骏令。
202 (已接受) 服務(wù)器已接受請求,但尚未處理垄提。
203 (非授權(quán)信息) 服務(wù)器已成功處理了請求榔袋,但返回的信息可能來自另一來源。
204 (無內(nèi)容) 服務(wù)器成功處理了請求铡俐,但沒有返回任何內(nèi)容凰兑。
205 (重置內(nèi)容) 服務(wù)器成功處理了請求,但沒有返回任何內(nèi)容审丘。
206 (部分內(nèi)容) 服務(wù)器成功處理了部分 GET 請求吏够。
3xx (重定向)
表示要完成請求,需要進一步操作滩报。 通常锅知,這些狀態(tài)代碼用來重定向。
代碼 說明
300 (多種選擇) 針對請求脓钾,服務(wù)器可執(zhí)行多種操作售睹。 服務(wù)器可根據(jù)請求者 (user agent) 選擇一項操作,或提供操作列表供請求者選擇可训。
301 (永久移動) 請求的網(wǎng)頁已永久移動到新位置侣姆。 服務(wù)器返回此響應(yīng)(對 GET 或 HEAD 請求的響應(yīng))時,會自動將請求者轉(zhuǎn)到新位置沉噩。
302 (臨時移動) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求捺宗,但請求者應(yīng)繼續(xù)使用原有位置來進行以后的請求。
303 (查看其他位置) 請求者應(yīng)當(dāng)對不同的位置使用單獨的 GET 請求來檢索響應(yīng)時川蒙,服務(wù)器返回此代碼蚜厉。
304 (未修改) 自從上次請求后,請求的網(wǎng)頁未修改過畜眨。 服務(wù)器返回此響應(yīng)時昼牛,不會返回網(wǎng)頁內(nèi)容术瓮。
305 (使用代理) 請求者只能使用代理訪問請求的網(wǎng)頁。 如果服務(wù)器返回此響應(yīng)贰健,還表示請求者應(yīng)使用代理胞四。
307 (臨時重定向) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請求,但請求者應(yīng)繼續(xù)使用原有位置來進行以后的請求伶椿。
4xx(請求錯誤)
這些狀態(tài)代碼表示請求可能出錯辜伟,妨礙了服務(wù)器的處理。
代碼 說明
400 (錯誤請求) 服務(wù)器不理解請求的語法脊另。
401 (未授權(quán)) 請求要求身份驗證导狡。 對于需要登錄的網(wǎng)頁,服務(wù)器可能返回此響應(yīng)偎痛。
403 (禁止) 服務(wù)器拒絕請求旱捧。
404 (未找到) 服務(wù)器找不到請求的網(wǎng)頁。
405 (方法禁用) 禁用請求中指定的方法踩麦。
406 (不接受) 無法使用請求的內(nèi)容特性響應(yīng)請求的網(wǎng)頁枚赡。
407 (需要代理授權(quán)) 此狀態(tài)代碼與 401(未授權(quán))類似,但指定請求者應(yīng)當(dāng)授權(quán)使用代理谓谦。
408 (請求超時) 服務(wù)器等候請求時發(fā)生超時贫橙。
409 (沖突) 服務(wù)器在完成請求時發(fā)生沖突。 服務(wù)器必須在響應(yīng)中包含有關(guān)沖突的信息茁计。
410 (已刪除) 如果請求的資源已永久刪除料皇,服務(wù)器就會返回此響應(yīng)。
411 (需要有效長度) 服務(wù)器不接受不含有效內(nèi)容長度標(biāo)頭字段的請求星压。
412 (未滿足前提條件) 服務(wù)器未滿足請求者在請求中設(shè)置的其中一個前提條件践剂。
413 (請求實體過大) 服務(wù)器無法處理請求,因為請求實體過大娜膘,超出服務(wù)器的處理能力逊脯。
414 (請求的 URI 過長) 請求的 URI(通常為網(wǎng)址)過長,服務(wù)器無法處理竣贪。
415 (不支持的媒體類型) 請求的格式不受請求頁面的支持军洼。
416 (請求范圍不符合要求) 如果頁面無法提供請求的范圍,則服務(wù)器會返回此狀態(tài)代碼演怎。
417 (未滿足期望值) 服務(wù)器未滿足”期望”請求標(biāo)頭字段的要求匕争。
5xx(服務(wù)器錯誤)
這些狀態(tài)代碼表示服務(wù)器在嘗試處理請求時發(fā)生內(nèi)部錯誤。 這些錯誤可能是服務(wù)器本身的錯誤爷耀,而不是請求出錯甘桑。
代碼 說明
500 (服務(wù)器內(nèi)部錯誤) 服務(wù)器遇到錯誤,無法完成請求。
501 (尚未實施) 服務(wù)器不具備完成請求的功能跑杭。 例如铆帽,服務(wù)器無法識別請求方法時可能會返回此代碼。
502 (錯誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理德谅,從上游服務(wù)器收到無效響應(yīng)爹橱。
503 (服務(wù)不可用) 服務(wù)器目前無法使用(由于超載或停機維護)。 通常窄做,這只是暫時狀態(tài)愧驱。
504 (網(wǎng)關(guān)超時) 服務(wù)器作為網(wǎng)關(guān)或代理,但是沒有及時從上游服務(wù)器收到請求浸策。
505 (HTTP 版本不受支持) 服務(wù)器不支持請求中所用的 HTTP 協(xié)議版本惹盼。
RFC 6585 最近剛剛發(fā)布庸汗,該文檔描述了 4 個新的 HTTP 狀態(tài)碼。
HTTP 協(xié)議還在變化手报?是的蚯舱,HTTP 協(xié)議一直在演變,新的狀態(tài)碼對于開發(fā) REST 服務(wù)或者說是基于 HTTP 的服務(wù)非常有用掩蛤,下面我們?yōu)槟阍敿?xì)介紹這四個新的狀態(tài)碼以及是否應(yīng)該使用枉昏。
428 Precondition Required (要求先決條件)
先決條件是客戶端發(fā)送 HTTP 請求時,如果想要請求能成功必須滿足一些預(yù)設(shè)的條件揍鸟。
一個好的例子就是 If-None-Match 頭兄裂,經(jīng)常在 GET 請求中使用,如果指定了 If-None-Match 阳藻,那么客戶端只在響應(yīng)中的 ETag 改變后才會重新接收回應(yīng)晰奖。
先決條件的另外一個例子就是 If-Match 頭,這個一般用在 PUT 請求上用于指示只更新沒被改變的資源腥泥,這在多個客戶端使用 HTTP 服務(wù)時用來防止彼此間不會覆蓋相同內(nèi)容匾南。
當(dāng)服務(wù)器端使用 428 Precondition Required 狀態(tài)碼時,表示客戶端必須發(fā)送上述的請求頭才能執(zhí)行請求蛔外,這個方法為服務(wù)器提供一種有效的方法來阻止 'lost update' 問題蛆楞。
429 Too Many Requests (太多請求)
當(dāng)你需要限制客戶端請求某個服務(wù)數(shù)量時,該狀態(tài)碼就很有用夹厌,也就是請求速度限制豹爹。
在此之前,有一些類似的狀態(tài)碼矛纹,例如 '509 Bandwidth Limit Exceeded'. Twitter 使用 420 (這不是HTTP定義的狀態(tài)碼)
如果你希望限制客戶端對服務(wù)的請求數(shù)臂聋,可使用 429 狀態(tài)碼,同時包含一個 Retry-After 響應(yīng)頭用于告訴客戶端多長時間后可以再次請求服務(wù)。
431 Request Header Fields Too Large (請求頭字段太大)
某些情況下逻住,客戶端發(fā)送 HTTP 請求頭會變得很大钟哥,那么服務(wù)器可發(fā)送 431 Request Header Fields Too Large 來指明該問題。
我不太清楚為什么沒有 430 狀態(tài)碼瞎访,而是直接從 429 跳到 431腻贰,我嘗試搜索但沒有結(jié)果。唯一的猜測是 430 Forbidden 跟 403 Forbidden 太像了扒秸,為了避免混淆才這么做的播演,天知道!
511 Network Authentication Required (要求網(wǎng)絡(luò)認(rèn)證)
對我來說這個狀態(tài)碼很有趣伴奥,如果你在開發(fā)一個 HTTP 服務(wù)器写烤,你不一定需要處理該狀態(tài)碼,但如果你在編寫 HTTP 客戶端拾徙,那這個狀態(tài)碼就非常重要洲炊。
如果你頻繁使用筆記本和智能手機,你可能會注意到大量的公用 WIFI 服務(wù)要求你必須接受一些協(xié)議或者必須登錄后才能使用尼啡。
這是通過攔截HTTP流量暂衡,當(dāng)用戶試圖訪問網(wǎng)絡(luò)返回一個重定向和登錄,這很討厭崖瞭,但是實際情況就是這樣的狂巢。
使用這些“攔截”客戶端,會有一些討厭的副作用书聚。在 RFC 中有提到這兩個的例子:
如果你在登錄WIFI前訪問某個網(wǎng)站唧领,網(wǎng)絡(luò)設(shè)備將會攔截首個請求,這些設(shè)備往往也有自己的網(wǎng)站圖標(biāo) ‘favicon.ico'雌续。登錄后您會發(fā)現(xiàn)斩个,有一段時間內(nèi)你訪問的網(wǎng)站圖標(biāo)一直是WIFI登錄網(wǎng)站的圖標(biāo)。
如果客戶端使用HTTP請求來查找文檔(可能是JSON)西雀,網(wǎng)絡(luò)將會響應(yīng)一個登錄頁萨驶,這樣你的客戶端就會解析錯誤并導(dǎo)致客戶端運行異常,在現(xiàn)實中這種問題非常常見艇肴。
因此 511 狀態(tài)碼的提出就是為了解決這個問題腔呜。
如果你正在編寫 HTTP 的客戶端,你最好還是檢查 511 狀態(tài)碼以確認(rèn)是否需要認(rèn)證后才能訪問再悼。