1xx(臨時(shí)響應(yīng))
表示臨時(shí)響應(yīng)并需要請(qǐng)求者繼續(xù)執(zhí)行操作的狀態(tài)代碼逗扒。
代碼 | 說明 |
---|---|
100 | (繼續(xù)) 請(qǐng)求者應(yīng)當(dāng)繼續(xù)提出請(qǐng)求宛裕。 服務(wù)器返回此代碼表示已收到請(qǐng)求的第一部分腰懂,正在等待其余部分刁俭。 |
101 | (切換協(xié)議) 請(qǐng)求者已要求服務(wù)器切換協(xié)議,服務(wù)器已確認(rèn)并準(zhǔn)備切換散劫。 |
2xx (成功)
表示成功處理了請(qǐng)求的狀態(tài)代碼稚机。
代碼 | 說明 |
---|---|
200 | (成功) 服務(wù)器已成功處理了請(qǐng)求。 通常获搏,這表示服務(wù)器提供了請(qǐng)求的網(wǎng)頁赖条。 |
201 | (已創(chuàng)建) 請(qǐng)求成功并且服務(wù)器創(chuàng)建了新的資源。 |
202 | (已接受) 服務(wù)器已接受請(qǐng)求常熙,但尚未處理纬乍。 |
203 | (非授權(quán)信息) 服務(wù)器已成功處理了請(qǐng)求,但返回的信息可能來自另一來源症概。 |
204 | (無內(nèi)容) 服務(wù)器成功處理了請(qǐng)求蕾额,但沒有返回任何內(nèi)容。 |
205 | (重置內(nèi)容) 服務(wù)器成功處理了請(qǐng)求彼城,但沒有返回任何內(nèi)容。 |
206 | (部分內(nèi)容) 服務(wù)器成功處理了部分 GET 請(qǐng)求 |
3xx (重定向)
表示要完成請(qǐng)求,需要進(jìn)一步操作募壕。 通常调炬,這些狀態(tài)代碼用來重定向。
代碼 | 說明 |
---|---|
300 | (多種選擇) 針對(duì)請(qǐng)求舱馅,服務(wù)器可執(zhí)行多種操作缰泡。 服務(wù)器可根據(jù)請(qǐng)求者 (user agent) 選擇一項(xiàng)操作,或提供操作列表供請(qǐng)求者選擇代嗤。 |
301 | (永久移動(dòng)) 請(qǐng)求的網(wǎng)頁已永久移動(dòng)到新位置棘钞。 服務(wù)器返回此響應(yīng)(對(duì) GET 或 HEAD 請(qǐng)求的響應(yīng))時(shí),會(huì)自動(dòng)將請(qǐng)求者轉(zhuǎn)到新位置干毅。 |
302 | (臨時(shí)移動(dòng)) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請(qǐng)求宜猜,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來進(jìn)行以后的請(qǐng)求。 |
303 | (查看其他位置) 請(qǐng)求者應(yīng)當(dāng)對(duì)不同的位置使用單獨(dú)的 GET 請(qǐng)求來檢索響應(yīng)時(shí)硝逢,服務(wù)器返回此代碼姨拥。 |
304 | (未修改) 自從上次請(qǐng)求后,請(qǐng)求的網(wǎng)頁未修改過渠鸽。 服務(wù)器返回此響應(yīng)時(shí)叫乌,不會(huì)返回網(wǎng)頁內(nèi)容。 |
305 | (使用代理) 請(qǐng)求者只能使用代理訪問請(qǐng)求的網(wǎng)頁徽缚。 如果服務(wù)器返回此響應(yīng)憨奸,還表示請(qǐng)求者應(yīng)使用代理。 |
307 | (臨時(shí)重定向) 服務(wù)器目前從不同位置的網(wǎng)頁響應(yīng)請(qǐng)求凿试,但請(qǐng)求者應(yīng)繼續(xù)使用原有位置來進(jìn)行以后的請(qǐng)求 |
4xx(請(qǐng)求錯(cuò)誤)
這些狀態(tài)代碼表示請(qǐng)求可能出錯(cuò)排宰,妨礙了服務(wù)器的處理。
代碼 | 說明 |
---|---|
400 | (錯(cuò)誤請(qǐng)求) 服務(wù)器不理解請(qǐng)求的語法红省。 |
401 | (未授權(quán)) 請(qǐng)求要求身份驗(yàn)證额各。 對(duì)于需要登錄的網(wǎng)頁,服務(wù)器可能返回此響應(yīng)吧恃。 |
403 | (禁止) 服務(wù)器拒絕請(qǐng)求虾啦。 |
404 | (未找到) 服務(wù)器找不到請(qǐng)求的網(wǎng)頁。 |
405 | (方法禁用) 禁用請(qǐng)求中指定的方法痕寓。 |
406 | (不接受) 無法使用請(qǐng)求的內(nèi)容特性響應(yīng)請(qǐng)求的網(wǎng)頁傲醉。 |
407 | (需要代理授權(quán)) 此狀態(tài)代碼與 401(未授權(quán))類似,但指定請(qǐng)求者應(yīng)當(dāng)授權(quán)使用代理呻率。 |
408 | (請(qǐng)求超時(shí)) 服務(wù)器等候請(qǐng)求時(shí)發(fā)生超時(shí)硬毕。 |
409 | (沖突) 服務(wù)器在完成請(qǐng)求時(shí)發(fā)生沖突。 服務(wù)器必須在響應(yīng)中包含有關(guān)沖突的信息礼仗。 |
410 | (已刪除) 如果請(qǐng)求的資源已永久刪除吐咳,服務(wù)器就會(huì)返回此響應(yīng)逻悠。 |
411 | (需要有效長度) 服務(wù)器不接受不含有效內(nèi)容長度標(biāo)頭字段的請(qǐng)求。 |
412 | (未滿足前提條件) 服務(wù)器未滿足請(qǐng)求者在請(qǐng)求中設(shè)置的其中一個(gè)前提條件韭脊。 |
413 | (請(qǐng)求實(shí)體過大) 服務(wù)器無法處理請(qǐng)求童谒,因?yàn)檎?qǐng)求實(shí)體過大,超出服務(wù)器的處理能力沪羔。 |
414 | (請(qǐng)求的 URI 過長) 請(qǐng)求的 URI(通常為網(wǎng)址)過長饥伊,服務(wù)器無法處理。 |
415 | (不支持的媒體類型) 請(qǐng)求的格式不受請(qǐng)求頁面的支持蔫饰。 |
416 | (請(qǐng)求范圍不符合要求) 如果頁面無法提供請(qǐng)求的范圍琅豆,則服務(wù)器會(huì)返回此狀態(tài)代碼。 |
417 | (未滿足期望值) 服務(wù)器未滿足”期望”請(qǐng)求標(biāo)頭字段的要求 |
5xx(服務(wù)器錯(cuò)誤)
這些狀態(tài)代碼表示服務(wù)器在嘗試處理請(qǐng)求時(shí)發(fā)生內(nèi)部錯(cuò)誤篓吁。 這些錯(cuò)誤可能是服務(wù)器本身的錯(cuò)誤茫因,而不是請(qǐng)求出錯(cuò)。
代碼 | 說明 |
---|---|
500 | (服務(wù)器內(nèi)部錯(cuò)誤) 服務(wù)器遇到錯(cuò)誤越除,無法完成請(qǐng)求节腐。 |
501 | (尚未實(shí)施) 服務(wù)器不具備完成請(qǐng)求的功能。 例如摘盆,服務(wù)器無法識(shí)別請(qǐng)求方法時(shí)可能會(huì)返回此代碼翼雀。 |
502 | (錯(cuò)誤網(wǎng)關(guān)) 服務(wù)器作為網(wǎng)關(guān)或代理,從上游服務(wù)器收到無效響應(yīng)孩擂。 |
503 | (服務(wù)不可用) 服務(wù)器目前無法使用(由于超載或停機(jī)維護(hù))狼渊。 通常,這只是暫時(shí)狀態(tài)类垦。 |
504 | (網(wǎng)關(guān)超時(shí)) 服務(wù)器作為網(wǎng)關(guān)或代理狈邑,但是沒有及時(shí)從上游服務(wù)器收到請(qǐng)求。 |
505 | (HTTP 版本不受支持) 服務(wù)器不支持請(qǐng)求中所用的 HTTP 協(xié)議版本 |
RFC 6585 最近剛剛發(fā)布蚤认,該文檔描述了 4 個(gè)新的 HTTP 狀態(tài)碼米苹。
HTTP 協(xié)議還在變化?是的砰琢,HTTP 協(xié)議一直在演變蘸嘶,新的狀態(tài)碼對(duì)于開發(fā) REST 服務(wù)或者說是基于 HTTP 的服務(wù)非常有用,下面我們?yōu)槟阍敿?xì)介紹這四個(gè)新的狀態(tài)碼以及是否應(yīng)該使用陪汽。
428 Precondition Required (要求先決條件)
先決條件是客戶端發(fā)送 HTTP 請(qǐng)求時(shí)训唱,如果想要請(qǐng)求能成功必須滿足一些預(yù)設(shè)的條件。
一個(gè)好的例子就是 If-None-Match 頭挚冤,經(jīng)常在 GET 請(qǐng)求中使用况增,如果指定了 If-None-Match ,那么客戶端只在響應(yīng)中的 ETag 改變后才會(huì)重新接收回應(yīng)训挡。
先決條件的另外一個(gè)例子就是 If-Match 頭澳骤,這個(gè)一般用在 PUT 請(qǐng)求上用于指示只更新沒被改變的資源歧强,這在多個(gè)客戶端使用 HTTP 服務(wù)時(shí)用來防止彼此間不會(huì)覆蓋相同內(nèi)容。
當(dāng)服務(wù)器端使用 428 Precondition Required 狀態(tài)碼時(shí)宴凉,表示客戶端必須發(fā)送上述的請(qǐng)求頭才能執(zhí)行請(qǐng)求誊锭,這個(gè)方法為服務(wù)器提供一種有效的方法來阻止 ‘lost update’ 問題表悬。
429 Too Many Requests (太多請(qǐng)求)
當(dāng)你需要限制客戶端請(qǐng)求某個(gè)服務(wù)數(shù)量時(shí)弥锄,該狀態(tài)碼就很有用,也就是請(qǐng)求速度限制蟆沫。
在此之前籽暇,有一些類似的狀態(tài)碼,例如 ‘509 Bandwidth Limit Exceeded’. Twitter 使用 420 (這不是HTTP定義的狀態(tài)碼)
如果你希望限制客戶端對(duì)服務(wù)的請(qǐng)求數(shù)饭庞,可使用 429 狀態(tài)碼戒悠,同時(shí)包含一個(gè) Retry-After 響應(yīng)頭用于告訴客戶端多長時(shí)間后可以再次請(qǐng)求服務(wù)。
431 Request Header Fields Too Large (請(qǐng)求頭字段太大)
某些情況下舟山,客戶端發(fā)送 HTTP 請(qǐng)求頭會(huì)變得很大绸狐,那么服務(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)證)
對(duì)我來說這個(gè)狀態(tài)碼很有趣蠢琳,如果你在開發(fā)一個(gè) HTTP 服務(wù)器啊终,你不一定需要處理該狀態(tài)碼,但如果你在編寫 HTTP 客戶端傲须,那這個(gè)狀態(tài)碼就非常重要蓝牲。
如果你頻繁使用筆記本和智能手機(jī),你可能會(huì)注意到大量的公用 WIFI 服務(wù)要求你必須接受一些協(xié)議或者必須登錄后才能使用泰讽。
這是通過攔截HTTP流量例衍,當(dāng)用戶試圖訪問網(wǎng)絡(luò)返回一個(gè)重定向和登錄,這很討厭菇绵,但是實(shí)際情況就是這樣的肄渗。
使用這些“攔截”客戶端,會(huì)有一些討厭的副作用咬最。在 RFC 中有提到這兩個(gè)的例子:
如果你在登錄WIFI前訪問某個(gè)網(wǎng)站翎嫡,網(wǎng)絡(luò)設(shè)備將會(huì)攔截首個(gè)請(qǐng)求,這些設(shè)備往往也有自己的網(wǎng)站圖標(biāo) ‘favicon.ico’永乌。登錄后您會(huì)發(fā)現(xiàn)惑申,有一段時(shí)間內(nèi)你訪問的網(wǎng)站圖標(biāo)一直是WIFI登錄網(wǎng)站的圖標(biāo)具伍。
如果客戶端使用HTTP請(qǐng)求來查找文檔(可能是JSON),網(wǎng)絡(luò)將會(huì)響應(yīng)一個(gè)登錄頁圈驼,這樣你的客戶端就會(huì)解析錯(cuò)誤并導(dǎo)致客戶端運(yùn)行異常人芽,在現(xiàn)實(shí)中這種問題非常常見。
因此 511 狀態(tài)碼的提出就是為了解決這個(gè)問題绩脆。
如果你正在編寫 HTTP 的客戶端萤厅,你最好還是檢查 511 狀態(tài)碼以確認(rèn)是否需要認(rèn)證后才能訪問。