HTTP狀態(tài)碼匯總

大部分狀態(tài)碼為網(wǎng)上查閱的資料內(nèi)容或根據(jù)資料而得出的結(jié)論,不保證具備處理實(shí)際問題的能力,僅作參考

基礎(chǔ)

HTTP狀態(tài)碼(status codes)是HTTP協(xié)議中,響應(yīng)報(bào)文的起始行中包含的一種服務(wù)器用于向客戶端說明操作狀態(tài)的三位數(shù)字。例如在一個(gè)正常的GET請(qǐng)求完成后,服務(wù)器會(huì)向客戶端返回

HTTP/1.0 200 OK

在這個(gè)例子中,狀態(tài)碼就是 200
狀態(tài)碼的第一位數(shù)字表示了響應(yīng)狀態(tài)的類型,其中

  • 1xx 信息提示,信息響應(yīng)類
  • 2xx 成功響應(yīng)
  • 3xx 重定向
  • 4xx 客戶端錯(cuò)誤
  • 5xx 服務(wù)器錯(cuò)誤

由于當(dāng)前的HTTP版本只為每種類型的狀態(tài)碼定義了少數(shù)一部分,而HTTP協(xié)議具有可拓展性,隨著協(xié)議的發(fā)展,狀態(tài)碼將不斷完善,較老版本的HTTP應(yīng)用就不能識(shí)別較新的狀態(tài)碼,而這個(gè)特性也就使得不同版本的HTTP應(yīng)用在通訊時(shí)產(chǎn)生了一些問題。由于 HTTP/0.9 版本的響應(yīng)報(bào)文只包含實(shí)體部分,沒有狀態(tài)碼或原因短語的存在,故不做討論。

1xx狀態(tài)碼是 HTTP/1.1 版本新定義的,用來表示請(qǐng)求被正常接受,會(huì)進(jìn)行進(jìn)一步處理。這些狀態(tài)碼相對(duì)較新,并且 HTTP/1.0 版本無法識(shí)別,所以原則上不應(yīng)該向HTTP/1.0版本的客戶端發(fā)送任何1xx狀態(tài)碼。

以下,先從2開頭的狀態(tài)碼開始講起

狀態(tài)碼2xx

200 OK

請(qǐng)求成功。成功的含義取決于HTTP方法:

  • GET:資源已被提取并在消息正文中傳輸。
  • HEAD:實(shí)體標(biāo)頭位于消息正文中。
  • POST:描述動(dòng)作結(jié)果的資源在消息體中傳輸。
  • TRACE:消息正文包含服務(wù)器收到的請(qǐng)求消息。

201 Created

該請(qǐng)求已成功,并因此創(chuàng)建了一個(gè)新的資源。這通常是在PUT請(qǐng)求之后發(fā)送的響應(yīng)。

202 Accepted

請(qǐng)求已經(jīng)接收到,但還未響應(yīng),沒有結(jié)果。意味著不會(huì)有一個(gè)異步的響應(yīng)去表明當(dāng)前請(qǐng)求的結(jié)果,預(yù)期另外的進(jìn)程和服務(wù)去處理請(qǐng)求,或者批處理。

已接受用于處理,但處理尚未完成。

203 Non-Authoritative Information

服務(wù)器已成功處理了請(qǐng)求,但返回的實(shí)體頭部元信息不是在原始服務(wù)器上有效的確定集合,而是來自本地或者第三方的拷貝。當(dāng)前的信息可能是原始版本的子集或者超集。例如,包含資源的元數(shù)據(jù)可能導(dǎo)致原始服務(wù)器知道元信息的超集。使用此狀態(tài)碼不是必須的,而且只有在響應(yīng)不使用此狀態(tài)碼便會(huì)返回200 OK的情況下才是合適的。

非授權(quán)信息.請(qǐng)求成功.但返回的meta信息不在原始服務(wù)器而是一個(gè)副本

203 非權(quán)威內(nèi)容,簡單的說,就是通過代理訪問原始服務(wù)器的時(shí)候,成功獲取了原始服務(wù)器(狀態(tài)200)的返回內(nèi)容,但是代理對(duì)內(nèi)容做出了一些改動(dòng),例如修改了文檔編碼等等,代理通過這個(gè)狀態(tài)碼告知用戶,成功獲取內(nèi)容,但是這部分內(nèi)容和原始服務(wù)器的返回內(nèi)容可能不完全一致。

204 No Content

服務(wù)器成功處理了請(qǐng)求,但不需要返回任何實(shí)體內(nèi)容,并且希望返回更新了的元信息。響應(yīng)可能通過實(shí)體頭部的形式,返回新的或更新后的元信息。如果存在這些頭部信息,則應(yīng)當(dāng)與所請(qǐng)求的變量相呼應(yīng)。如果客戶端是瀏覽器的話,那么用戶瀏覽器應(yīng)保留發(fā)送了該請(qǐng)求的頁面,而不產(chǎn)生任何文檔視圖上的變化,即使按照規(guī)范新的或更新后的元信息應(yīng)當(dāng)被應(yīng)用到用戶瀏覽器活動(dòng)視圖中的文檔。由于204響應(yīng)被禁止包含任何消息體,因此它始終以消息頭后的第一個(gè)空行結(jié)尾。

  • 狀態(tài)碼204表示請(qǐng)求已經(jīng)執(zhí)行成功,但沒有內(nèi)容。
  • 瀏覽器不會(huì)刷新頁面,也不會(huì)導(dǎo)向別的頁面。

對(duì)于一些請(qǐng)求,如果不需要多余的數(shù)據(jù)響應(yīng),只要返回是否成功的信息時(shí),可以考慮用204狀態(tài)。

無響應(yīng) — 已接收請(qǐng)求,但不存在要回送的信息。

205 Reset Content

服務(wù)器成功處理了請(qǐng)求,且沒有返回任何內(nèi)容。但是與204響應(yīng)不同,返回此狀態(tài)碼的響應(yīng)要求請(qǐng)求者重置文檔視圖。該響應(yīng)主要是被用于接受用戶輸入后,立即重置表單,以便用戶能夠輕松地開始另一次輸入。與204響應(yīng)一樣,該響應(yīng)也被禁止包含任何消息體,且以消息頭后的第一個(gè)空行結(jié)束。

206 Partial Content

服務(wù)器已經(jīng)成功處理了部分 GET 請(qǐng)求。類似于 FlashGet 或者迅雷這類的 HTTP 下載工具都是使用此類響應(yīng)實(shí)現(xiàn)斷點(diǎn)續(xù)傳或者將一個(gè)大文檔分解為多個(gè)下載段同時(shí)下載。該請(qǐng)求必須包含 Range 頭信息來指示客戶端希望得到的內(nèi)容范圍,并且可能包含 If-Range 來作為請(qǐng)求條件。

207 Multi-Status (WebDAV)

由WebDAV(RFC 2518)擴(kuò)展的狀態(tài)碼,代表之后的消息體將是一個(gè)XML消息,并且可能依照之前子請(qǐng)求數(shù)量的不同,包含一系列獨(dú)立的響應(yīng)代碼。

208 Multi-Status (WebDAV)

在 DAV 里面使用: propstat 響應(yīng)元素以避免重復(fù)枚舉多個(gè)綁定的內(nèi)部成員到同一個(gè)集合。

226 IM Used (HTTP Delta encoding)

服務(wù)器已經(jīng)完成了對(duì)資源的 GET 請(qǐng)求,并且響應(yīng)是對(duì)當(dāng)前實(shí)例應(yīng)用的一個(gè)或多個(gè)實(shí)例操作結(jié)果的表示。

狀態(tài)碼3xx

重定向狀態(tài)碼用來告訴瀏覽器客戶端,它們?cè)L問的資源已被移動(dòng), Web服務(wù)器發(fā)送一個(gè)重定向狀態(tài)碼和一個(gè)可選的Location Header, 告訴客戶端新的資源地址在哪。

瀏覽器客戶端會(huì)自動(dòng)用Location中提供的地址,重新發(fā)送新的Request。 這個(gè)過程對(duì)用戶來說是透明的。

301和302 非常相似, 一個(gè)是永久轉(zhuǎn)移,一個(gè)是臨時(shí)轉(zhuǎn)移。 (在我們看來, 這兩個(gè)沒太大區(qū)別)

302,303,307 是一樣。這是因?yàn)?02是HTTP1.0定義的,HTTP1.1中使用303,307. 同時(shí)又保留了302.(但在現(xiàn)實(shí)中,我們還是用302,我是沒見過303和307)

300 Multiple Choice

被請(qǐng)求的資源有一系列可供選擇的回饋信息,每個(gè)都有自己特定的地址和瀏覽器驅(qū)動(dòng)的商議信息。用戶或?yàn)g覽器能夠自行選擇一個(gè)首選的地址進(jìn)行重定向。

客戶端請(qǐng)求了實(shí)際指向多個(gè)資源的URL。這個(gè)代碼是和一個(gè)選項(xiàng)列表一起返回的,然后用戶就可以選擇他希望的選項(xiàng)了

301 Moved Permanently

被請(qǐng)求的資源已永久移動(dòng)到新位置,并且將來任何對(duì)此資源的引用都應(yīng)該使用本響應(yīng)返回的若干個(gè) URI 之一。如果可能,擁有鏈接編輯功能的客戶端應(yīng)當(dāng)自動(dòng)把請(qǐng)求的地址修改為從服務(wù)器反饋回來的地址。除非額外指定,否則這個(gè)響應(yīng)也是可緩存的。

請(qǐng)求的URL已移走。Response中應(yīng)該包含一個(gè)Location URL, 說明資源現(xiàn)在所處的位置

302 Found

請(qǐng)求的資源現(xiàn)在臨時(shí)從不同的 URI 響應(yīng)請(qǐng)求。由于這樣的重定向是臨時(shí)的,客戶端應(yīng)當(dāng)繼續(xù)向原有地址發(fā)送以后的請(qǐng)求。只有在Cache-Control或Expires中進(jìn)行了指定的情況下,這個(gè)響應(yīng)才是可緩存的。

與狀態(tài)碼301類似。但這里的移除是臨時(shí)的。 客戶端會(huì)使用Location中給出的URL,重新發(fā)送新的HTTP request

303 See Other

對(duì)應(yīng)當(dāng)前請(qǐng)求的響應(yīng)可以在另一個(gè) URI 上被找到,而且客戶端應(yīng)當(dāng)采用 GET 的方式訪問那個(gè)資源。這個(gè)方法的存在主要是為了允許由腳本激活的POST請(qǐng)求輸出重定向到一個(gè)新的資源。

304 Not Modified

如果客戶端發(fā)送了一個(gè)帶條件的 GET 請(qǐng)求且該請(qǐng)求已被允許,而文檔的內(nèi)容(自上次訪問以來或者根據(jù)請(qǐng)求的條件)并沒有改變,則服務(wù)器應(yīng)當(dāng)返回這個(gè)狀態(tài)碼。304 響應(yīng)禁止包含消息體,因此始終以消息頭后的第一個(gè)空行結(jié)尾。(強(qiáng)緩存和協(xié)商緩存)

305 Use Proxy

被請(qǐng)求的資源必須通過指定的代理才能被訪問。Location 域中將給出指定的代理所在的 URI 信息,接收者需要重復(fù)發(fā)送一個(gè)單獨(dú)的請(qǐng)求,通過這個(gè)代理才能訪問相應(yīng)資源。只有原始服務(wù)器才能建立305響應(yīng)。

306 已不再使用

307 Temporary Redirect

請(qǐng)求的資源現(xiàn)在臨時(shí)從不同的URI 響應(yīng)請(qǐng)求。由于這樣的重定向是臨時(shí)的,客戶端應(yīng)當(dāng)繼續(xù)向原有地址發(fā)送以后的請(qǐng)求。只有在Cache-Control或Expires中進(jìn)行了指定的情況下,這個(gè)響應(yīng)才是可緩存的。類似302

308 Permanent Redirect

這意味著資源現(xiàn)在永久位于由 Location: HTTP Response 標(biāo)頭指定的另一個(gè) URI。 這與 301 Moved Permanently HTTP 響應(yīng)代碼具有相同的語義,但用戶代理不能更改所使用的 HTTP 方法:如果在第一個(gè)請(qǐng)求中使用 POST,則必須在第二個(gè)請(qǐng)求中使用 POST。

狀態(tài)碼4xx

客戶端錯(cuò)誤 - 請(qǐng)求有語法錯(cuò)誤或請(qǐng)求無法實(shí)現(xiàn)

400 Bad Request

  1. 語義有誤,當(dāng)前請(qǐng)求無法被服務(wù)器理解。除非進(jìn)行修改,否則客戶端不應(yīng)該重復(fù)提交這個(gè)請(qǐng)求。

  2. 請(qǐng)求參數(shù)有誤。

401 Unauthorized

當(dāng)前請(qǐng)求需要用戶驗(yàn)證。該響應(yīng)必須包含一個(gè)適用于被請(qǐng)求資源的 WWW-Authenticate 信息頭用以詢問用戶信息??蛻舳丝梢灾貜?fù)提交一個(gè)包含恰當(dāng)?shù)?Authorization 頭信息的請(qǐng)求。如果當(dāng)前請(qǐng)求已經(jīng)包含了 Authorization 證書,那么401響應(yīng)代表著服務(wù)器驗(yàn)證已經(jīng)拒絕了那些證書。如果401響應(yīng)包含了與前一個(gè)響應(yīng)相同的身份驗(yàn)證詢問,且瀏覽器已經(jīng)至少嘗試了一次驗(yàn)證,那么瀏覽器應(yīng)當(dāng)向用戶展示響應(yīng)中包含的實(shí)體信息,因?yàn)檫@個(gè)實(shí)體信息中可能包含了相關(guān)診斷信息。

403 Forbidden

服務(wù)器已經(jīng)理解請(qǐng)求,但是拒絕執(zhí)行它。與 401 響應(yīng)不同的是,身份驗(yàn)證并不能提供任何幫助,而且這個(gè)請(qǐng)求也不應(yīng)該被重復(fù)提交。如果這不是一個(gè) HEAD 請(qǐng)求,而且服務(wù)器希望能夠講清楚為何請(qǐng)求不能被執(zhí)行,那么就應(yīng)該在實(shí)體內(nèi)描述拒絕的原因。當(dāng)然服務(wù)器也可以返回一個(gè) 404 響應(yīng),假如它不希望讓客戶端獲得任何信息。

404 Not Found

請(qǐng)求失敗,請(qǐng)求所希望得到的資源未被在服務(wù)器上發(fā)現(xiàn)。沒有信息能夠告訴用戶這個(gè)狀況到底是暫時(shí)的還是永久的。假如服務(wù)器知道情況的話,應(yīng)當(dāng)使用410狀態(tài)碼來告知舊資源因?yàn)槟承﹥?nèi)部的配置機(jī)制問題,已經(jīng)永久的不可用,而且沒有任何可以跳轉(zhuǎn)的地址。404這個(gè)狀態(tài)碼被廣泛應(yīng)用于當(dāng)服務(wù)器不想揭示到底為何請(qǐng)求被拒絕或者沒有其他適合的響應(yīng)可用的情況下。

405 Method Not Allowed

請(qǐng)求行中指定的請(qǐng)求方法不能被用于請(qǐng)求相應(yīng)的資源。該響應(yīng)必須返回一個(gè)Allow 頭信息用以表示出當(dāng)前資源能夠接受的請(qǐng)求方法的列表。   鑒于 PUT,DELETE 方法會(huì)對(duì)服務(wù)器上的資源進(jìn)行寫操作,因而絕大部分的網(wǎng)頁服務(wù)器都不支持或者在默認(rèn)配置下不允許上述請(qǐng)求方法,對(duì)于此類請(qǐng)求均會(huì)返回405錯(cuò)誤。

406 Not Acceptable

請(qǐng)求的資源的內(nèi)容特性無法滿足請(qǐng)求頭中的條件,因而無法生成響應(yīng)實(shí)體。


406.png

狀態(tài)碼:406,請(qǐng)求頭(Request Headers)中看到Accept優(yōu)先是application/json格式,而響應(yīng)頭(Response Hraders)中卻發(fā)現(xiàn)返回信息的格式是“text/html”,前臺(tái)無法解析,需將結(jié)果轉(zhuǎn)換成json格式返回給前臺(tái)。

407 Proxy Authentication Required

與401響應(yīng)類似,只不過客戶端必須在代理服務(wù)器上進(jìn)行身份驗(yàn)證。代理服務(wù)器必須返回一個(gè) Proxy-Authenticate 用以進(jìn)行身份詢問??蛻舳丝梢苑祷匾粋€(gè) Proxy-Authorization 信息頭用以驗(yàn)證。

408 Request Timeout

請(qǐng)求超時(shí)。客戶端沒有在服務(wù)器預(yù)備等待的時(shí)間內(nèi)完成一個(gè)請(qǐng)求的發(fā)送??蛻舳丝梢噪S時(shí)再次提交這一請(qǐng)求而無需進(jìn)行任何更改。

409 Conflict

由于和被請(qǐng)求的資源的當(dāng)前狀態(tài)之間存在沖突,請(qǐng)求無法完成。這個(gè)代碼只允許用在這樣的情況下才能被使用:用戶被認(rèn)為能夠解決沖突,并且會(huì)重新提交新的請(qǐng)求。該響應(yīng)應(yīng)當(dāng)包含足夠的信息以便用戶發(fā)現(xiàn)沖突的源頭。

410 Gone

被請(qǐng)求的資源在服務(wù)器上已經(jīng)不再可用,而且沒有任何已知的轉(zhuǎn)發(fā)地址。這樣的狀況應(yīng)當(dāng)被認(rèn)為是永久性的。如果可能,擁有鏈接編輯功能的客戶端應(yīng)當(dāng)在獲得用戶許可后刪除所有指向這個(gè)地址的引用。如果服務(wù)器不知道或者無法確定這個(gè)狀況是否是永久的,那么就應(yīng)該使用 404 狀態(tài)碼。除非額外說明,否則這個(gè)響應(yīng)是可緩存的。

410響應(yīng)的目的主要是幫助網(wǎng)站管理員維護(hù)網(wǎng)站,通知用戶該資源已經(jīng)不再可用,并且服務(wù)器擁有者希望所有指向這個(gè)資源的遠(yuǎn)端連接也被刪除。這類事件在限時(shí)、增值服務(wù)中很普遍。同樣,410響應(yīng)也被用于通知客戶端在當(dāng)前服務(wù)器站點(diǎn)上,原本屬于某個(gè)個(gè)人的資源已經(jīng)不再可用。當(dāng)然,是否需要把所有永久不可用的資源標(biāo)記為'410 Gone',以及是否需要保持此標(biāo)記多長時(shí)間,完全取決于服務(wù)器擁有者。

411 Length Required

服務(wù)器拒絕在沒有定義 Content-Length 頭的情況下接受請(qǐng)求。在添加了表明請(qǐng)求消息體長度的有效 Content-Length 頭之后,客戶端可以再次提交該請(qǐng)求。

412 Precondition Failed

服務(wù)器在驗(yàn)證在請(qǐng)求的頭字段中給出先決條件時(shí),沒能滿足其中的一個(gè)或多個(gè)。這個(gè)狀態(tài)碼允許客戶端在獲取資源時(shí)在請(qǐng)求的元信息(請(qǐng)求頭字段數(shù)據(jù))中設(shè)置先決條件,以此避免該請(qǐng)求方法被應(yīng)用到其希望的內(nèi)容以外的資源上。

在服務(wù)器上測試前提條件時(shí),部分請(qǐng)求標(biāo)題字段中所給定的前提條件估計(jì)為FALSE??蛻魴C(jī)將前提條件放置在當(dāng)前資源 metainformation(標(biāo)題字段數(shù)據(jù))中,以防止所請(qǐng)求的方法被誤用到其他資源。

這通常發(fā)生于采用除 GET 和 HEAD 之外的方法進(jìn)行條件請(qǐng)求時(shí),由首部字段 If-Unmodified-Since 或 If-None-Match 規(guī)定的先決條件不成立的情況下。這時(shí)候,請(qǐng)求的操作——通常是上傳或修改文件——無法執(zhí)行,從而返回該錯(cuò)誤狀態(tài)碼。
相關(guān)的兩個(gè)請(qǐng)求頭含義:

If-Unmodified-Since

HTTP協(xié)議中的 If-Unmodified-Since 消息頭用于請(qǐng)求之中,使得當(dāng)前請(qǐng)求成為條件式請(qǐng)求:只有當(dāng)資源在指定的時(shí)間之后沒有進(jìn)行過修改的情況下,服務(wù)器才會(huì)返回請(qǐng)求的資源,或是接受 POST 或其他 non-safe 方法的請(qǐng)求。如果所請(qǐng)求的資源在指定的時(shí)間之后發(fā)生了修改,那么會(huì)返回 412 (Precondition Failed) 錯(cuò)誤。

If-None-Match

If-None-Match 是一個(gè)條件式請(qǐng)求首部。對(duì)于 GET 和 HEAD 請(qǐng)求方法來說,當(dāng)且僅當(dāng)服務(wù)器上沒有任何資源的 ETag 屬性值與這個(gè)首部中列出的相匹配的時(shí)候,服務(wù)器端會(huì)才返回所請(qǐng)求的資源,響應(yīng)碼為 200 。對(duì)于其他方法來說,當(dāng)且僅當(dāng)最終確認(rèn)沒有已存在的資源的 ETag 屬性值與這個(gè)首部中所列出的相匹配的時(shí)候,才會(huì)對(duì)請(qǐng)求進(jìn)行相應(yīng)的處理。

總結(jié)來說,是由于上面兩個(gè)請(qǐng)求頭校驗(yàn)不通過,導(dǎo)致返回了412。

413 Payload Too Large

服務(wù)器拒絕處理當(dāng)前請(qǐng)求,因?yàn)樵撜?qǐng)求提交的實(shí)體數(shù)據(jù)大小超過了服務(wù)器愿意或者能夠處理的范圍。此種情況下,服務(wù)器可以關(guān)閉連接以免客戶端繼續(xù)發(fā)送此請(qǐng)求。如果這個(gè)狀況是臨時(shí)的,服務(wù)器應(yīng)當(dāng)返回一個(gè) Retry-After 的響應(yīng)頭,以告知客戶端可以在多少時(shí)間以后重新嘗試。

414 URI Too Long

請(qǐng)求的URI 長度超過了服務(wù)器能夠解釋的長度,因此服務(wù)器拒絕對(duì)該請(qǐng)求提供服務(wù)。這比較少見,通常的情況包括:本應(yīng)使用POST方法的表單提交變成了GET方法,導(dǎo)致查詢字符串(Query String)過長。

415 Unsupported Media Type

對(duì)于當(dāng)前請(qǐng)求的方法和所請(qǐng)求的資源,請(qǐng)求中提交的實(shí)體并不是服務(wù)器中所支持的格式(Content-Type),因此請(qǐng)求被拒絕

416 Requested Range Not Satisfiable

如果請(qǐng)求中包含了 Range 請(qǐng)求頭,并且 Range 中指定的任何數(shù)據(jù)范圍都與當(dāng)前資源的可用范圍不重合,同時(shí)請(qǐng)求中又沒有定義 If-Range 請(qǐng)求頭,那么服務(wù)器就應(yīng)當(dāng)返回416狀態(tài)碼。

假如 Range 使用的是字節(jié)范圍,那么這種情況就是指請(qǐng)求指定的所有數(shù)據(jù)范圍的首字節(jié)位置都超過了當(dāng)前資源的長度。服務(wù)器也應(yīng)當(dāng)在返回416狀態(tài)碼的同時(shí),包含一個(gè) Content-Range 實(shí)體頭,用以指明當(dāng)前資源的長度。這個(gè)響應(yīng)也被禁止使用 multipart/byteranges 作為其 Content-Type。

417 Expectation Failed

此響應(yīng)代碼意味著服務(wù)器無法滿足 期望 請(qǐng)求標(biāo)頭字段指示的期望值。

在請(qǐng)求頭 Expect 中指定的預(yù)期內(nèi)容無法被服務(wù)器滿足,或者這個(gè)服務(wù)器是一個(gè)代理服務(wù)器,它有明顯的證據(jù)證明在當(dāng)前路由的下一個(gè)節(jié)點(diǎn)上,Expect 的內(nèi)容無法被滿足。

418 I’m a teapot

服務(wù)器拒絕嘗試用 “茶壺沖泡咖啡”。

htcpcp1.0協(xié)議中的418的意義是:當(dāng)客戶端給一個(gè)茶壺發(fā)送泡咖啡的請(qǐng)求時(shí),茶壺就返回一個(gè)418錯(cuò)誤狀態(tài)碼,表示“我是一個(gè)茶壺”。

418現(xiàn)在更多是爬蟲警告

421 Misdirected Request

可能包含兩種含義,目前沒有實(shí)際見到該狀態(tài)碼,僅作參考吧
該請(qǐng)求針對(duì)的是無法產(chǎn)生響應(yīng)的服務(wù)器。 這可以由服務(wù)器發(fā)送,該服務(wù)器未配置為針對(duì)包含在請(qǐng)求 URI 中的方案和權(quán)限的組合產(chǎn)生響應(yīng)。

421(Misdirected Request)狀態(tài)碼表明請(qǐng)求被定向到一個(gè)不能產(chǎn)生響應(yīng)的服務(wù)器上。這個(gè)狀態(tài)碼可以被一個(gè)未被配置為對(duì)請(qǐng)求URI中包含的scheme和authority的組合產(chǎn)生響應(yīng)的服務(wù)器發(fā)送。

客戶端收到一個(gè)來自服務(wù)器端的421(Misdirected Request)響應(yīng)時(shí)可以在一個(gè)不同的連接上重試請(qǐng)求,不管請(qǐng)求方法是不是冪等的。這在連接被復(fù)用或者替代服務(wù)被選擇的情況下是可能的。

這個(gè)狀態(tài)碼一定不能由代理生成。

421響應(yīng)默認(rèn)是可以緩存的,除非另外在方法定義中表明或者進(jìn)行顯式的緩存控制。

421(429) too many connections

從當(dāng)前客戶端所在的IP地址到服務(wù)器的連接數(shù)超過了服務(wù)器許可的最大范圍。通常,這里的IP地址指的是從服務(wù)器上看到的客戶端地址(比如用戶的網(wǎng)關(guān)或者代理服務(wù)器地址)。在這種情況下,連接數(shù)的計(jì)算可能涉及到不止一個(gè)終端用戶。

422 Unprocessable Entity (WebDAV)

請(qǐng)求格式正確,但是由于含有語義錯(cuò)誤,無法響應(yīng)。422 則表現(xiàn)為請(qǐng)求格式錯(cuò)誤,但出現(xiàn)了 語義 錯(cuò)誤,以至于服務(wù)端無法響應(yīng)。可以理解為服務(wù)端能理解請(qǐng)求資源類型 content-type,否則應(yīng)該返回 415(Unsupported Media Type),也能理解請(qǐng)求實(shí)體內(nèi)容,否則應(yīng)該返回 400(Bad Request)。

423 Locked (WebDAV)

正在訪問的資源被鎖定。

424 Failed Dependency (WebDAV)

由于先前的請(qǐng)求失敗,所以此次請(qǐng)求失敗。

426 Upgrade Required

服務(wù)器拒絕使用當(dāng)前協(xié)議執(zhí)行請(qǐng)求,但可能在客戶機(jī)升級(jí)到其他協(xié)議后愿意這樣做。 服務(wù)器在 426 響應(yīng)中發(fā)送 Upgrade 頭以指示所需的協(xié)議。

428 Precondition Required (要求先決條件)

原始服務(wù)器要求該請(qǐng)求是有條件的。 旨在防止“丟失更新”問題,即客戶端獲取資源狀態(tài),修改該狀態(tài)并將其返回服務(wù)器,同時(shí)第三方修改服務(wù)器上的狀態(tài),從而導(dǎo)致沖突。

先決條件是客戶端發(fā)送 HTTP 請(qǐng)求時(shí),必須要滿足的一些預(yù)設(shè)條件。一個(gè)好的例子就是 If-None-Match 頭,經(jīng)常用在 GET 請(qǐng)求中。如果指定了 If-None-Match ,那么客戶端只在響應(yīng)中的 ETag 改變后才會(huì)重新接收回應(yīng)。

先決條件的另外一個(gè)例子是 If-Match 頭,一般用在 PUT 請(qǐng)求上,用于指示只更新但沒有被改變的資源。這在多個(gè)客戶端使用 HTTP 服務(wù)時(shí)用來防止彼此間覆蓋相同內(nèi)容的情況。

當(dāng)服務(wù)器端使用 428 Precondition Required 狀態(tài)碼時(shí),表示客戶端必須發(fā)送上述的請(qǐng)求頭才能執(zhí)行該請(qǐng)求操作。這個(gè)方法為服務(wù)器提供一種有效的方法來阻止 “l(fā)ost update”問題的出現(xiàn)。

429 Too Many Requests

用戶在給定的時(shí)間內(nèi)發(fā)送了太多請(qǐng)求(“限制請(qǐng)求速率”)。

當(dāng)你需要限制客戶端請(qǐng)求某個(gè)服務(wù)的數(shù)量,也就是限制請(qǐng)求速度時(shí),該狀態(tài)碼就會(huì)非常有用。在此之前,有一些類似的狀態(tài)碼。例如“509 Bandwidth Limit Exceeded”。

如果你希望限制客戶端對(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 來指明該問題。

451 Unavailable For Legal Reasons

用戶請(qǐng)求非法資源,例如:由政府審查的網(wǎng)頁。

狀態(tài)碼5xx

服務(wù)器端錯(cuò)誤 - 服務(wù)器未能實(shí)現(xiàn)合法的請(qǐng)求

500 Internal Server Error

服務(wù)器遇到了不知道如何處理的情況。

501 Not Implemented

此請(qǐng)求方法不被服務(wù)器支持且無法被處理。只有GET和HEAD是要求服務(wù)器支持的,它們必定不會(huì)返回此錯(cuò)誤代碼。

502 Bad Gateway

此錯(cuò)誤響應(yīng)表明服務(wù)器作為網(wǎng)關(guān)需要得到一個(gè)處理這個(gè)請(qǐng)求的響應(yīng),但是得到一個(gè)錯(cuò)誤的響應(yīng)。

服務(wù)器暫時(shí)不可用,有時(shí)是為了防止發(fā)生系統(tǒng)過載

造成502的原因常見的就是腳本執(zhí)行超過timeout設(shè)置時(shí)間,或者timeout設(shè)置過大,導(dǎo)致php進(jìn)程長時(shí)間不能被釋放,沒有空閑worker進(jìn)程來接客。

503 Service Unavailable

服務(wù)器沒有準(zhǔn)備好處理請(qǐng)求。 常見原因是服務(wù)器因維護(hù)或重載而停機(jī)。 請(qǐng)注意,與此響應(yīng)一起,應(yīng)發(fā)送解釋問題的用戶友好頁面。 這個(gè)響應(yīng)應(yīng)該用于臨時(shí)條件和 Retry-After:如果可能的話,HTTP頭應(yīng)該包含恢復(fù)服務(wù)之前的估計(jì)時(shí)間。 網(wǎng)站管理員還必須注意與此響應(yīng)一起發(fā)送的與緩存相關(guān)的標(biāo)頭,因?yàn)檫@些臨時(shí)條件響應(yīng)通常不應(yīng)被緩存。

504 Gateway Timeout

當(dāng)服務(wù)器作為網(wǎng)關(guān),不能及時(shí)得到響應(yīng)時(shí)返回此錯(cuò)誤代碼。

505 HTTP Version Not Supported

服務(wù)器不支持請(qǐng)求中所使用的HTTP協(xié)議版本。

506 Variant Also Negotiates

服務(wù)器有一個(gè)內(nèi)部配置錯(cuò)誤:對(duì)請(qǐng)求的透明內(nèi)容協(xié)商導(dǎo)致循環(huán)引用。
由《透明內(nèi)容協(xié)商協(xié)議》擴(kuò)展,代表服務(wù)器存在內(nèi)部配置錯(cuò)誤:被請(qǐng)求的協(xié)商變?cè)Y源被配置為在透明內(nèi)容協(xié)商中使用自己,因此在一個(gè)協(xié)商處理中不是一個(gè)合適的重點(diǎn)。

507 Insufficient Storage

服務(wù)器無法存儲(chǔ)完成請(qǐng)求所必須的內(nèi)容。這個(gè)狀況被認(rèn)為是臨時(shí)的。

508 508 Loop Detected (WebDAV)

服務(wù)器在處理請(qǐng)求時(shí)檢測到無限循環(huán)。

509

服務(wù)器達(dá)到帶寬限制。==這不是一個(gè)官方的狀態(tài)碼==,但是仍被廣泛使用。

510 Not Extended

服務(wù)器需要對(duì)請(qǐng)求進(jìn)一步擴(kuò)展才能實(shí)現(xiàn)它。獲取資源所需要的策略并沒有沒滿足。

511 Network Authentication Required

511 狀態(tài)碼指示客戶端需要進(jìn)行身份驗(yàn)證才能獲得網(wǎng)絡(luò)訪問權(quán)限。

狀態(tài)碼1xx

100 Continue

該狀態(tài)碼說明服務(wù)器收到了請(qǐng)求的初始部分,并且請(qǐng)客戶端繼續(xù)發(fā)送。在服務(wù)器發(fā)送了 100 Continue 狀態(tài)碼之后,如果收到客戶端的請(qǐng)求,則必須進(jìn)行響應(yīng)。

需求場景

這個(gè)狀態(tài)碼實(shí)際上是對(duì)如下場景的一種優(yōu)化:客戶端有一個(gè)較大的文件需要上傳并保存,但是客戶端不知道服務(wù)器是否愿意接受這個(gè)文件,所以希望在消耗網(wǎng)絡(luò)資源進(jìn)行傳輸之前,先詢問一下服務(wù)器的意愿。實(shí)際操作為客戶端發(fā)送一條特殊的請(qǐng)求報(bào)文,報(bào)文的頭部應(yīng)包含

Expect: 100-continue

此時(shí),如果服務(wù)器愿意接受,就會(huì)返回100 Continue 狀態(tài)碼,反之則返回 417 Expectation Failed 狀態(tài)碼。對(duì)于客戶端而言,如果客戶端沒有發(fā)送實(shí)際請(qǐng)求的打算,則不應(yīng)該發(fā)送包含 100 Continue Expect 的報(bào)文,因?yàn)檫@樣會(huì)讓服務(wù)器誤以為客戶端將要發(fā)送一個(gè)請(qǐng)求。

之前提到過,并不是所有的HTTP應(yīng)用都支持 100 Continue 這個(gè)狀態(tài)碼(例如HTTP/1.0及之前的版本的代理或服務(wù)器)所以客戶端不應(yīng)該在發(fā)送 100 Continue Expect 后一直等待服務(wù)器的響應(yīng),在一定時(shí)間后,客戶端應(yīng)當(dāng)直接發(fā)送計(jì)劃發(fā)送的內(nèi)容。

而對(duì)于服務(wù)器而言,也不應(yīng)當(dāng)把 100 Continue 當(dāng)作一個(gè)嚴(yán)格的判斷方法。服務(wù)器有可能在發(fā)送回應(yīng)之前就受到了客戶端發(fā)來的主體報(bào)文。此時(shí)服務(wù)器就不需要再發(fā)送 100 Continue 作為回應(yīng)了。但仍然需要在接受完成后返回適當(dāng)?shù)臓顟B(tài)碼。理論上,當(dāng)服務(wù)器收到一個(gè) 100 Continue Expect 請(qǐng)求時(shí),應(yīng)當(dāng)進(jìn)行響應(yīng)。但服務(wù)器永遠(yuǎn)也不應(yīng)向沒有發(fā)送 100 Continue Expect 請(qǐng)求的客戶端發(fā)送100 Continue 狀態(tài)碼作為回應(yīng)。這里提到的應(yīng)當(dāng)進(jìn)行響應(yīng)是指:假設(shè)服務(wù)器不打算接收客戶端將要發(fā)送的主體報(bào)文,也應(yīng)當(dāng)做適當(dāng)?shù)捻憫?yīng)(例如發(fā)送 417 Expectation Failed)而不是單純的關(guān)閉連接,這樣會(huì)對(duì)客戶端在網(wǎng)絡(luò)層面上產(chǎn)生影響。

特別的,作為代理的HTTP應(yīng)用在收到帶有 100 Continue Expect的請(qǐng)求時(shí),需要進(jìn)行額外的判斷。假設(shè)代理服務(wù)器明確知道報(bào)文下游的HTTP版本是兼容 HTTP/1.1 的,或者代理服務(wù)器不知道報(bào)文下游的版本,它都應(yīng)當(dāng)轉(zhuǎn)發(fā)這條 100 Continue Expect 請(qǐng)求。但是如果代理服務(wù)器明確知道報(bào)文下游的應(yīng)用無法處理 100 Continue Expect 的話,則應(yīng)當(dāng)直接向客戶端返回 417 Expectation Failed 作為響應(yīng)。而這也并非唯一的解決辦法,另一種可行的辦法是直接向客戶端返回 100 Continue,然后向下游傳遞刪除了 100 Continue Expect 的報(bào)文。

另外,如果代理服務(wù)器決定為 HTTP/1.0 及之前的版本服務(wù)的話,那么當(dāng)它收到來自服務(wù)器的 100 Continue 響應(yīng)報(bào)文時(shí),則不應(yīng)當(dāng)向客戶端轉(zhuǎn)發(fā)這條響應(yīng),因?yàn)榭蛻舳撕芸赡懿恢廊绾翁幚碓搱?bào)文。

101 Switching Protocol

(協(xié)議切換)狀態(tài)碼表示服務(wù)器應(yīng)客戶端升級(jí)協(xié)議的請(qǐng)求對(duì)協(xié)議進(jìn)行切換。


101.png
實(shí)現(xiàn)協(xié)議切換的原理
  1. Connection: UpgradeConnection頭被設(shè)置為"Upgrade"以表示的升級(jí)要求。Upgrade:protocols。

    所述Upgrade標(biāo)頭指定的一個(gè)或多個(gè)以逗號(hào)分隔的協(xié)議名稱。
  2. 檢查服務(wù)器是否支持客戶端所需要的協(xié)議。
  3. 服務(wù)器可拒絕升級(jí)-在這種情況下,它發(fā)送回一個(gè)普通?;蚪邮苌?jí),在這種情況下,它會(huì)發(fā)送一個(gè)
    "101 Switching Protocols"
    
    帶有升級(jí)標(biāo)頭的指定所選協(xié)議的標(biāo)頭。
例子
1012.png
應(yīng)用場景

此機(jī)制始終由客戶端發(fā)起,并且服務(wù)器可能接受或拒絕切換到新協(xié)議??蛻舳丝墒褂贸S玫膮f(xié)議(如HTTP/1.1)發(fā)起請(qǐng)求,請(qǐng)求說明需要切換到HTTP/2或甚至到WebSocket。

websocket場景

為了實(shí)現(xiàn)WebSocket通信,首先需要客戶端發(fā)起一次普通HTTP請(qǐng)求。也就是說,WebSocket的建立是依賴HTTP的。請(qǐng)求報(bào)文可能像下面這樣

GET ws://websocket.example.com/ HTTP/1.1
Host: websocket.example.com
Upgrade: websocket
Connection: Upgrade
Origin: http://example.com
Sec-WebSocket-Key:pAloKxsGSHtpIHrJdWLvzQ==
Sec-WebSocket-Version:13

其中HTTP頭部字段Upgrade: websocketConnection: Upgrade非常重要,告訴服務(wù)器通信協(xié)議將發(fā)生改變,轉(zhuǎn)為WebSocket協(xié)議。支持WebSocket的服務(wù)器端在確認(rèn)以上請(qǐng)求后,應(yīng)返回狀態(tài)碼為

101 Switching Protocols

的響應(yīng)

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: nRu4KAPUPjjWYrnzxDVeqOxCvlM=

其中字段Sec-WebSocket-Accept是由服務(wù)器對(duì)前面客戶端發(fā)送的Sec-WebSocket-Key進(jìn)行確認(rèn)和加密后的結(jié)果,相當(dāng)于一次驗(yàn)證,以幫助客戶端確信對(duì)方是真實(shí)可用的WebSocket服務(wù)器。

驗(yàn)證通過后,這個(gè)握手響應(yīng)就確立了WebSocket連接,此后,服務(wù)器端就可以主動(dòng)發(fā)信息給客戶端了。此時(shí)的狀態(tài)比較像服務(wù)器端和客戶端接通了電話,無論是誰有什么信息想告訴對(duì)方,開口就好了。

一旦建立了WebSocket連接,此后的通信就不再使用HTTP了,改為使用WebSocket獨(dú)立的數(shù)據(jù)幀。

102 Processing (WebDAV)

此代碼表示服務(wù)器已收到并正在處理該請(qǐng)求,但沒有響應(yīng)可用。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 此文HTTP狀態(tài),包括1xx, 2xx,3xx,4xx,5xx開頭的對(duì)應(yīng)狀態(tài)碼及含義,需要查詢的直接搜索即可 1....
    Kean_Qi閱讀 731評(píng)論 0 1
  • 1xx消息 這一類型的狀態(tài)碼,代表請(qǐng)求已被接受,需要繼續(xù)處理。這類響應(yīng)是臨時(shí)響應(yīng),只包含狀態(tài)行和某些可選的響應(yīng)頭信...
    sincere_bs閱讀 436評(píng)論 0 0
  • HTTP狀態(tài)碼匯總 轉(zhuǎn)自https://github.com/ChenYilong/iOSDevelopmentTips
    有毒的程序猿閱讀 219評(píng)論 0 0
  • http狀態(tài)碼匯總(全) 當(dāng)一個(gè)用戶瀏覽網(wǎng)頁或者發(fā)送請(qǐng)求時(shí),服務(wù)器都會(huì)返回一個(gè)包含http狀態(tài)碼的信息頭來響應(yīng),今...
    伯約同學(xué)閱讀 278評(píng)論 0 0
  • 當(dāng)瀏覽者訪問一個(gè)網(wǎng)頁時(shí),瀏覽者的瀏覽器會(huì)向網(wǎng)頁所在服務(wù)器發(fā)出請(qǐng)求。當(dāng)瀏覽器接收并顯示網(wǎng)頁前,此網(wǎng)頁所在的服務(wù)器會(huì)返...
    申申申申渺鑫閱讀 232評(píng)論 0 1

友情鏈接更多精彩內(nèi)容