下面描述了每個(gè)狀態(tài)碼,包括它可以遵循的方法的描述以及響應(yīng)中所需的任何元信息。
10.1信息 1xx
此類(lèi)狀態(tài)代碼表示臨時(shí)響應(yīng),僅由 Status-Line 和可選標(biāo)題組成,并以空行終止。此類(lèi)狀態(tài)代碼沒(méi)有必需的標(biāo)頭。由于 HTTP/1.0 沒(méi)有定義任何 1xx 狀態(tài)代碼,服務(wù)器不得向 HTTP/1.0 客戶(hù)端發(fā)送 1xx 響應(yīng),除非在實(shí)驗(yàn)條件下。
客戶(hù)端必須準(zhǔn)備好在常規(guī)響應(yīng)之前接受一個(gè)或多個(gè) 1xx 狀態(tài)響應(yīng),即使客戶(hù)端不期望 100(繼續(xù))狀態(tài)消息。用戶(hù)代理可能會(huì)忽略意外的 1xx 狀態(tài)響應(yīng)。
代理必須轉(zhuǎn)發(fā) 1xx 響應(yīng),除非代理與其客戶(hù)端之間的連接已關(guān)閉,或者除非代理本身請(qǐng)求生成 1xx 響應(yīng)。(例如,如果一個(gè)
proxy 在轉(zhuǎn)發(fā)請(qǐng)求時(shí)添加了“Expect: 100-continue”字段,則不需要轉(zhuǎn)發(fā)相應(yīng)的 100(繼續(xù))響應(yīng)。)
10.1.1 100 繼續(xù)
客戶(hù)端應(yīng)該繼續(xù)它的請(qǐng)求。此臨時(shí)響應(yīng)用于通知客戶(hù)端已收到請(qǐng)求的初始部分并且尚未被服務(wù)器拒絕。客戶(hù)端應(yīng)該繼續(xù)發(fā)送請(qǐng)求的剩余部分,或者,如果請(qǐng)求已經(jīng)完成,則忽略此響應(yīng)。服務(wù)器必須在請(qǐng)求完成后發(fā)送最終響應(yīng)。
10.1.2 101 交換協(xié)議
服務(wù)器通過(guò)升級(jí)消息頭字段(第 14.42 節(jié))理解并愿意遵守客戶(hù)端的請(qǐng)求,以更改在此連接上使用的應(yīng)用程序協(xié)議。服務(wù)器將在終止 101 響應(yīng)的空行之后立即將協(xié)議切換到響應(yīng)的 Upgrade 標(biāo)頭字段定義的協(xié)議。
只有在有利的情況下才應(yīng)切換協(xié)議。例如,切換到較新版本的 HTTP 比舊版本更有優(yōu)勢(shì),而在交付使用此類(lèi)功能的資源時(shí),切換到實(shí)時(shí)、同步協(xié)議可能更有優(yōu)勢(shì)。
10.2成功2xx
此類(lèi)狀態(tài)碼表示客戶(hù)端的請(qǐng)求被成功接收、理解和接受。
10.2.1 200 正常
請(qǐng)求已成功。響應(yīng)返回的信息取決于請(qǐng)求中使用的方法,例如:
GET 在響應(yīng)中發(fā)送與請(qǐng)求的資源對(duì)應(yīng)的實(shí)體;
HEAD 請(qǐng)求資源對(duì)應(yīng)的實(shí)體頭字段在響應(yīng)中發(fā)送,不帶任何消息體;
POST 描述或包含操作結(jié)果的實(shí)體;
TRACE 包含終端服務(wù)器收到的請(qǐng)求消息的實(shí)體。
10.2.2 201 創(chuàng)建
請(qǐng)求已完成并導(dǎo)致創(chuàng)建新資源。新創(chuàng)建的資源可以被響應(yīng)實(shí)體中返回的 URI 引用,資源的最具體的 URI 由 Location 頭字段給出。響應(yīng)應(yīng)該包含一個(gè)實(shí)體,其中包含資源特征和位置列表,用戶(hù)或用戶(hù)代理可以從中選擇最合適的一個(gè)。實(shí)體格式由 Content-Type 標(biāo)頭字段中給出的媒體類(lèi)型指定。源服務(wù)器必須在返回 201 狀態(tài)碼之前創(chuàng)建資源。如果無(wú)法立即執(zhí)行該操作,則服務(wù)器應(yīng)該使用 202(已接受)響應(yīng)來(lái)響應(yīng)。
一個(gè) 201 響應(yīng)可能包含一個(gè) ETag 響應(yīng)頭字段,指示剛剛創(chuàng)建的請(qǐng)求變體的實(shí)體標(biāo)簽的當(dāng)前值。
10.2.3 202 接受
請(qǐng)求已被接受處理,但處理尚未完成。該請(qǐng)求最終可能會(huì)或可能不會(huì)被執(zhí)行,因?yàn)樵趯?shí)際進(jìn)行處理時(shí)它可能會(huì)被禁止。無(wú)法從諸如此類(lèi)的異步操作中重新發(fā)送狀態(tài)代碼。
202 響應(yīng)是故意不置可否的。它的目的是允許服務(wù)器接受對(duì)其他進(jìn)程的請(qǐng)求(可能是一個(gè)每天只運(yùn)行一次的面向批處理的進(jìn)程),而不需要用戶(hù)代理與服務(wù)器的連接持續(xù)到進(jìn)程完成。與此響應(yīng)一起返回的實(shí)體應(yīng)該包括請(qǐng)求當(dāng)前狀態(tài)的指示以及指向狀態(tài)監(jiān)視器的指針或用戶(hù)可以期望何時(shí)完成請(qǐng)求的一些估計(jì)。
10.2.4 203 非權(quán)威信息
實(shí)體標(biāo)頭中返回的元信息不是原始服務(wù)器可用的最終集,而是從本地或第三方副本收集的。呈現(xiàn)的集合可能是原始版本的子集或超集。例如,包含有關(guān)資源的本地注釋信息可能會(huì)導(dǎo)致源服務(wù)器已知的元信息的超集。不需要使用此響應(yīng)代碼,僅當(dāng)響應(yīng)為 200(OK)時(shí)才適用。
10.2.5 204 無(wú)內(nèi)容
服務(wù)器已完成請(qǐng)求,但不需要返回實(shí)體主體,并且可能希望返回更新的元信息。響應(yīng)可能包括實(shí)體頭形式的新的或更新的元信息,如果存在,應(yīng)該與請(qǐng)求的變體相關(guān)聯(lián)。
如果客戶(hù)端是用戶(hù)代理,它不應(yīng)該改變導(dǎo)致請(qǐng)求被發(fā)送的文檔視圖。這個(gè)響應(yīng)主要是為了允許輸入動(dòng)作發(fā)生而不導(dǎo)致用戶(hù)代理的活動(dòng)文檔視圖發(fā)生變化,盡管任何新的或更新的元信息應(yīng)該應(yīng)用于當(dāng)前在用戶(hù)代理的活動(dòng)視圖中的文檔。
204 響應(yīng)不能包含消息體,因此總是由頭字段之后的第一個(gè)空行終止。
10.2.6 205 重置內(nèi)容
服務(wù)器已經(jīng)完成了請(qǐng)求并且用戶(hù)代理應(yīng)該重置導(dǎo)致請(qǐng)求被發(fā)送的文檔視圖。此響應(yīng)主要是為了允許通過(guò)用戶(hù)輸入進(jìn)行操作的輸入,然后清除給出輸入的表單,以便用戶(hù)可以輕松地啟動(dòng)另一個(gè)輸入操作。響應(yīng)不得包含實(shí)體。
10.2.7 206 部分內(nèi)容
服務(wù)器已完成對(duì)資源的部分 GET 請(qǐng)求。請(qǐng)求必須包含一個(gè) Range 標(biāo)頭字段(第 14.35 節(jié))指示所需的范圍,并且可以包含一個(gè) If-Range 標(biāo)頭字段以使請(qǐng)求有條件。
響應(yīng)必須包含以下標(biāo)頭字段:
- Content-Range 標(biāo)頭字段(第 14.16 節(jié))指示 此響應(yīng)中包含的范圍,或 multipart/byteranges Content-Type 包括每個(gè)部分的 Content-Range 字段。如果一個(gè) Content-Length 頭域存在于響應(yīng)中,它的 值必須與實(shí)際發(fā)送的 OCTET 數(shù)量相匹配 郵件正文。
- 日期
- ETag 和/或 Content-Location,如果標(biāo)頭已發(fā)送 在對(duì)同一請(qǐng)求的 200 響應(yīng)中
- 過(guò)期、緩存控制和/或變化,如果字段值可能 與之前任何相同的響應(yīng)中發(fā)送的不同 變體
如果 206 響應(yīng)是使用強(qiáng)緩存驗(yàn)證器的 If-Range 請(qǐng)求的結(jié)果(請(qǐng)參閱第 13.3.3 節(jié)),則響應(yīng)不應(yīng)包含其他實(shí)體標(biāo)頭。如果響應(yīng)是使用弱驗(yàn)證器的 If-Range 請(qǐng)求的結(jié)果,則響應(yīng)不得包含其他實(shí)體標(biāo)頭;這可以防止緩存的實(shí)體主體和更新的標(biāo)頭之間的不一致。否則,響應(yīng)必須包含對(duì)同一請(qǐng)求的 200(OK)響應(yīng)返回的所有實(shí)體標(biāo)頭。
如果 ETag 或 Last-Modified 標(biāo)頭不完全匹配,則緩存不得將 206 響應(yīng)與其他先前緩存的內(nèi)容組合。
不支持 Range 和 Content-Range 標(biāo)頭的緩存不得緩存 206(部分)響應(yīng)。
10.3重定向 3xx
此類(lèi)狀態(tài)碼表明用戶(hù)代理需要采取進(jìn)一步的行動(dòng)才能滿(mǎn)足請(qǐng)求。當(dāng)且僅當(dāng)?shù)诙€(gè)請(qǐng)求中使用的方法是 GET 或 HEAD 時(shí),用戶(hù)代理可以執(zhí)行所需的操作,而無(wú)需與用戶(hù)交互。客戶(hù)端應(yīng)該檢測(cè)無(wú)限重定向循環(huán),因?yàn)檫@樣的循環(huán)會(huì)為每個(gè)重定向生成網(wǎng)絡(luò)流量。
注意:本規(guī)范的先前版本建議使用 最多五個(gè)重定向。內(nèi)容開(kāi)發(fā)者應(yīng)該意識(shí)到 可能有客戶(hù)端實(shí)現(xiàn)了這樣一個(gè)固定的 局限性。
10.3.1 300 多項(xiàng)選擇
請(qǐng)求的資源對(duì)應(yīng)于一組表示中的任何一個(gè),每個(gè)表示都有自己的特定位置,并且正在提供代理驅(qū)動(dòng)的協(xié)商信息(第 12 節(jié)),以便用戶(hù)(或用戶(hù)代理)可以選擇首選表示并重定向其請(qǐng)求該位置。
除非它是一個(gè) HEAD 請(qǐng)求,否則響應(yīng)應(yīng)該包含一個(gè)實(shí)體,該實(shí)體包含一個(gè)資源特征和位置列表,用戶(hù)或用戶(hù)代理可以從中選擇最合適的一個(gè)。實(shí)體格式由 ContentType 標(biāo)頭字段中給出的媒體類(lèi)型指定。取決于格式和能力
用戶(hù)代理,最合適的選擇可能會(huì)自動(dòng)執(zhí)行。但是,本規(guī)范沒(méi)有為這種自動(dòng)選擇定義任何標(biāo)準(zhǔn)。
如果服務(wù)器有首選的表示形式,它應(yīng)該在 Location 字段中包含該表示形式的特定 URI;用戶(hù)代理可以使用 Location 字段值進(jìn)行自動(dòng)重定向。除非另有說(shuō)明,否則此響應(yīng)是可緩存的。
10.3.2 301 永久移動(dòng)
請(qǐng)求的資源已被分配一個(gè)新的永久 URI,并且任何將來(lái)對(duì)該資源的引用都應(yīng)該使用返回的 URI 之一。如果可能,具有鏈接編輯功能的客戶(hù)端應(yīng)該自動(dòng)將對(duì) Request-URI 的引用重新鏈接到服務(wù)器返回的一個(gè)或多個(gè)新引用。除非另有說(shuō)明,否則此響應(yīng)是可緩存的。
新的永久 URI 應(yīng)該由響應(yīng)中的 Location 字段給出。除非請(qǐng)求方法是 HEAD,否則響應(yīng)的實(shí)體應(yīng)該包含一個(gè)簡(jiǎn)短的超文本注釋,其中包含指向新 URI 的超鏈接。
如果收到 301 狀態(tài)代碼以響應(yīng) GET 或 HEAD 以外的請(qǐng)求,用戶(hù)代理不得自動(dòng)重定向請(qǐng)求,除非用戶(hù)可以確認(rèn),因?yàn)檫@可能會(huì)改變發(fā)出請(qǐng)求的條件。
注意:當(dāng)自動(dòng)重定向 POST 請(qǐng)求后 接收 301 狀態(tài)碼,一些現(xiàn)有的 HTTP/1.0 用戶(hù)代理 會(huì)錯(cuò)誤地將其更改為 GET 請(qǐng)求。
10.3.3 302 找到
請(qǐng)求的資源臨時(shí)駐留在不同的 URI 下。由于重定向有時(shí)可能會(huì)改變,客戶(hù)端應(yīng)該繼續(xù)使用 Request-URI 來(lái)處理未來(lái)的請(qǐng)求。此響應(yīng)僅在由 Cache-Control 或 Expires 標(biāo)頭字段指示時(shí)才可緩存。
臨時(shí) URI 應(yīng)該由響應(yīng)中的 Location 字段給出。除非請(qǐng)求方法是 HEAD,否則響應(yīng)的實(shí)體應(yīng)該包含一個(gè)簡(jiǎn)短的超文本注釋,其中包含指向新 URI 的超鏈接。
如果收到 302 狀態(tài)碼以響應(yīng) GET 或 HEAD 以外的請(qǐng)求,除非用戶(hù)可以確認(rèn),否則用戶(hù)代理不得自動(dòng)重定向請(qǐng)求,因?yàn)檫@可能會(huì)改變發(fā)出請(qǐng)求的條件。
注意:RFC 1945 和 RFC 2068 指定不允許客戶(hù)端 更改重定向請(qǐng)求的方法。然而,大多數(shù) 現(xiàn)有的用戶(hù)代理實(shí)現(xiàn)將 302 視為 303 響應(yīng),對(duì) Location 字段值執(zhí)行 GET 的原始請(qǐng)求方法。狀態(tài)碼 303 和 307 有 為希望明確明確哪個(gè)服務(wù)器添加了 期望客戶(hù)的反應(yīng)。
10.3.4 303 見(jiàn)其他
可以在不同的 URI 下找到對(duì)請(qǐng)求的響應(yīng),并且應(yīng)該使用該資源上的 GET 方法來(lái)檢索。此方法的存在主要是為了允許 POST 激活腳本的輸出將用戶(hù)代理重定向到選定的資源。新的 URI 不是原始請(qǐng)求資源的替代引用。303 響應(yīng)不能被緩存,但對(duì)第二個(gè)(重定向)請(qǐng)求的響應(yīng)可能是可緩存的。
不同的 URI 應(yīng)該由響應(yīng)中的 Location 字段給出。除非請(qǐng)求方法是 HEAD,否則響應(yīng)的實(shí)體應(yīng)該包含一個(gè)簡(jiǎn)短的超文本注釋,其中包含指向新 URI 的超鏈接。
注意:許多 HTTP/1.1 之前的用戶(hù)代理不理解 303 地位。當(dāng)與此類(lèi)客戶(hù)端的互操作性是一個(gè)問(wèn)題時(shí), 可以使用 302 狀態(tài)碼代替,因?yàn)榇蠖鄶?shù)用戶(hù)代理會(huì)做出反應(yīng) 對(duì) 302 響應(yīng),如此處針對(duì) 303 所述。
10.3.5 304 未修改
如果客戶(hù)端已經(jīng)執(zhí)行了一個(gè)條件 GET 請(qǐng)求并且允許訪問(wèn),但是文檔沒(méi)有被修改,服務(wù)器應(yīng)該用這個(gè)狀態(tài)碼來(lái)響應(yīng)。304 響應(yīng)不能包含消息體,因此總是由頭字段之后的第一個(gè)空行終止。
響應(yīng)必須包含以下標(biāo)頭字段:
- 日期,除非第 14.18.1 節(jié)要求省略
如果無(wú)時(shí)鐘源服務(wù)器遵守這些規(guī)則,并且代理和客戶(hù)端將自己的 Date 添加到?jīng)]有收到的任何響應(yīng)中(如 [RFC 2068]),則緩存將正確運(yùn)行。
- ETag 和/或 Content-Location,如果標(biāo)頭已發(fā)送 在對(duì)同一請(qǐng)求的 200 響應(yīng)中
- 過(guò)期、緩存控制和/或變化,如果字段值可能 與之前任何相同的響應(yīng)中發(fā)送的不同 變體
如果條件 GET 使用了強(qiáng)緩存驗(yàn)證器(參見(jiàn)第 13.3.3 節(jié)),則響應(yīng)不應(yīng)包含其他實(shí)體標(biāo)頭。否則(即,條件 GET 使用弱驗(yàn)證器),響應(yīng)不得包含其他實(shí)體標(biāo)頭;這可以防止緩存的實(shí)體主體和更新的標(biāo)頭之間的不一致。
如果 304 響應(yīng)指示當(dāng)前未緩存的實(shí)體,則緩存必須忽略響應(yīng)并在沒(méi)有條件的情況下重復(fù)請(qǐng)求。
如果緩存使用接收到的 304 響應(yīng)來(lái)更新緩存條目,則緩存必須更新該條目以反映響應(yīng)中給出的任何新字段值。
10.3.6 305 使用代理
請(qǐng)求的資源必須通過(guò) Location 字段給出的代理訪問(wèn)。Location 字段給出了代理的 URI。接收者應(yīng)該通過(guò)代理重復(fù)這個(gè)單一的請(qǐng)求。305 響應(yīng)必須只能由源服務(wù)器生成。
注意:RFC 2068 并不清楚 305 旨在重定向 單個(gè)請(qǐng)求,并且僅由源服務(wù)器生成。不是 遵守這些限制會(huì)產(chǎn)生重大的安全后果。
10.3.7 306(未使用)
306 狀態(tài)碼在以前的規(guī)范版本中使用,不再使用,代碼被保留。
10.3.8 307 臨時(shí)重定向
請(qǐng)求的資源臨時(shí)駐留在不同的 URI 下。由于重定向有時(shí)可能會(huì)改變,客戶(hù)端應(yīng)該繼續(xù)使用 Request-URI 來(lái)處理未來(lái)的請(qǐng)求。此響應(yīng)僅在由 Cache-Control 或 Expires 標(biāo)頭字段指示時(shí)才可緩存。
臨時(shí) URI 應(yīng)該由響應(yīng)中的 Location 字段給出。除非請(qǐng)求方法是 HEAD,否則響應(yīng)的實(shí)體應(yīng)該包含一個(gè)簡(jiǎn)短的超文本注釋,其中包含指向新 URI 的超鏈接,因?yàn)樵S多 HTTP/1.1 之前的用戶(hù)代理不理解 307 狀態(tài)。因此,注釋?xiě)?yīng)該包含用戶(hù)在新 URI 上重復(fù)原始請(qǐng)求所需的信息。
如果收到 307 狀態(tài)代碼以響應(yīng) GET 或 HEAD 以外的請(qǐng)求,除非用戶(hù)可以確認(rèn),否則用戶(hù)代理不得自動(dòng)重定向請(qǐng)求,因?yàn)檫@可能會(huì)改變發(fā)出請(qǐng)求的條件。
10.4客戶(hù)端錯(cuò)誤 4xx
4xx 類(lèi)狀態(tài)碼適用于客戶(hù)端似乎出錯(cuò)的情況。除了響應(yīng) HEAD 請(qǐng)求時(shí),服務(wù)器應(yīng)該包含一個(gè)實(shí)體,其中包含對(duì)錯(cuò)誤情況的解釋,以及它是暫時(shí)的還是永久的情況。這些狀態(tài)碼適用于任何請(qǐng)求方法。用戶(hù)代理應(yīng)該向用戶(hù)顯示任何包含的實(shí)體。
如果客戶(hù)端正在發(fā)送數(shù)據(jù),使用 TCP 的服務(wù)器實(shí)現(xiàn)應(yīng)該小心確保客戶(hù)端在服務(wù)器關(guān)閉輸入連接之前確認(rèn)收到包含響應(yīng)的數(shù)據(jù)包。如果客戶(hù)端在關(guān)閉后繼續(xù)向服務(wù)器發(fā)送數(shù)據(jù),則服務(wù)器的 TCP 堆棧將向客戶(hù)端發(fā)送一個(gè)重置數(shù)據(jù)包,這可能會(huì)在 HTTP 應(yīng)用程序讀取和解釋客戶(hù)端未確認(rèn)的輸入緩沖區(qū)之前擦除它們。
10.4.1 400 錯(cuò)誤請(qǐng)求
由于語(yǔ)法錯(cuò)誤,服務(wù)器無(wú)法理解該請(qǐng)求。客戶(hù)端不應(yīng)該在沒(méi)有修改的情況下重復(fù)請(qǐng)求。
10.4.2 401 未經(jīng)授權(quán)
該請(qǐng)求需要用戶(hù)身份驗(yàn)證。響應(yīng)必須包含一個(gè) WWW-Authenticate 頭字段(第 14.47 節(jié)),其中包含適用于所請(qǐng)求資源的質(zhì)詢(xún)。客戶(hù)端可以使用合適的 Authorization 頭域重復(fù)請(qǐng)求。如果請(qǐng)求已包含授權(quán)憑證,則 401 響應(yīng)指示已拒絕對(duì)這些憑證的授權(quán)。如果 401 響應(yīng)包含與先前響應(yīng)相同的質(zhì)詢(xún),并且用戶(hù)代理已經(jīng)嘗試了至少一次身份驗(yàn)證,則應(yīng)該向用戶(hù)呈現(xiàn)響應(yīng)中給出的實(shí)體,因?yàn)樵搶?shí)體可能包含相關(guān)的診斷信息。HTTP 訪問(wèn)身份驗(yàn)證在“HTTP 身份驗(yàn)證:基本和摘要訪問(wèn)身份驗(yàn)證"中進(jìn)行了說(shuō)明。
10.4.3 402 需要付款
此代碼保留供將來(lái)使用。
10.4.4 403 禁止
服務(wù)器理解請(qǐng)求,但拒絕執(zhí)行。授權(quán)將無(wú)濟(jì)于事,并且不應(yīng)重復(fù)請(qǐng)求。如果請(qǐng)求方法不是 HEAD 并且服務(wù)器希望公開(kāi)請(qǐng)求未完成的原因,它應(yīng)該在實(shí)體中描述拒絕的原因。如果服務(wù)器不希望向客戶(hù)端提供此信息,則可以使用狀態(tài)代碼 404(未找到)來(lái)代替。
10.4.5 404 未找到
服務(wù)器未找到任何與請(qǐng)求 URI 匹配的內(nèi)容。沒(méi)有說(shuō)明這種情況是暫時(shí)的還是永久性的。如果服務(wù)器通過(guò)一些內(nèi)部可配置的機(jī)制知道舊資源永久不可用并且沒(méi)有轉(zhuǎn)發(fā)地址,則應(yīng)該使用 410 (Gone) 狀態(tài)代碼。當(dāng)服務(wù)器不希望確切地揭示請(qǐng)求被拒絕的原因或沒(méi)有其他響應(yīng)適用時(shí),通常使用此狀態(tài)代碼。
10.4.6 405 方法不允許
Request-URI 所標(biāo)識(shí)的資源不允許使用 Request-Line 中指定的方法。響應(yīng)必須包含一個(gè) Allow 標(biāo)頭,其中包含所請(qǐng)求資源的有效方法列表。
10.4.7 406 不可接受
請(qǐng)求標(biāo)識(shí)的資源只能根據(jù)請(qǐng)求中發(fā)送的接受頭生成具有不可接受的內(nèi)容特征的響應(yīng)實(shí)體。
除非它是一個(gè) HEAD 請(qǐng)求,否則響應(yīng)應(yīng)該包括一個(gè)實(shí)體,該實(shí)體包含一個(gè)可用實(shí)體特征和位置的列表,用戶(hù)或用戶(hù)代理可以從中選擇最合適的一個(gè)。實(shí)體格式由 Content-Type 標(biāo)頭字段中給出的媒體類(lèi)型指定。根據(jù)用戶(hù)代理的格式和能力,可以自動(dòng)選擇最合適的選項(xiàng)。但是,本規(guī)范沒(méi)有為這種自動(dòng)選擇定義任何標(biāo)準(zhǔn)。
注意:HTTP/1.1 服務(wù)器可以返回響應(yīng),這些響應(yīng)是 根據(jù)發(fā)送的接受標(biāo)頭不可接受 要求。在某些情況下,這甚至可能比發(fā)送 406 響應(yīng)。鼓勵(lì)用戶(hù)代理檢查 傳入響應(yīng)以確定它是否可以接受。
如果響應(yīng)可能不可接受,用戶(hù)代理應(yīng)該暫時(shí)停止接收更多數(shù)據(jù)并詢(xún)問(wèn)用戶(hù)以決定進(jìn)一步的操作。
10.4.8 407 需要代理驗(yàn)證
此代碼類(lèi)似于 401(未授權(quán)),但表示客戶(hù)端必須首先通過(guò)代理驗(yàn)證自己。代理必須返回一個(gè) Proxy-Authenticate 頭字段,其中包含適用于所請(qǐng)求資源的代理的質(zhì)詢(xún)。客戶(hù)端可以使用合適的 Proxy-Authorization 頭域重復(fù)請(qǐng)求。HTTP 訪問(wèn)身份驗(yàn)證在“HTTP 身份驗(yàn)證:基本和摘要訪問(wèn)身份驗(yàn)證” 中進(jìn)行了說(shuō)明。
10.4.9 408 請(qǐng)求超時(shí)
在服務(wù)器準(zhǔn)備等待的時(shí)間內(nèi),客戶(hù)端沒(méi)有產(chǎn)生請(qǐng)求。客戶(hù)端可以在以后的任何時(shí)間重復(fù)請(qǐng)求而無(wú)需修改。
10.4.10 409 沖突
由于與資源的當(dāng)前狀態(tài)沖突,無(wú)法完成請(qǐng)求。僅在預(yù)期用戶(hù)可能能夠解決沖突并重新提交請(qǐng)求的情況下才允許使用此代碼。響應(yīng)正文應(yīng)該包含足夠的
供用戶(hù)識(shí)別沖突來(lái)源的信息。理想情況下,響應(yīng)實(shí)體將包含足夠的信息供用戶(hù)或用戶(hù)代理解決問(wèn)題;但是,這可能是不可能的,也不是必需的。
響應(yīng) PUT 請(qǐng)求時(shí)最有可能發(fā)生沖突。例如,如果正在使用版本控制并且被 PUT 的實(shí)體包含對(duì)資源的更改,這些更改與早期(第三方)請(qǐng)求所做的更改相沖突,則服務(wù)器可能會(huì)使用 409 響應(yīng)來(lái)指示它無(wú)法完成請(qǐng)求. 在這種情況下,響應(yīng)實(shí)體可能會(huì)以響應(yīng) Content-Type 定義的格式包含兩個(gè)版本之間差異的列表。
10.4.11 410 走了
請(qǐng)求的資源在服務(wù)器上不再可用,并且不知道轉(zhuǎn)發(fā)地址。預(yù)計(jì)這種情況將被視為永久性的。具有鏈接編輯能力的客戶(hù)端應(yīng)該在用戶(hù)批準(zhǔn)后刪除對(duì) Request-URI 的引用。如果服務(wù)器不知道或無(wú)法確定條件是否是永久的,則應(yīng)該使用狀態(tài)代碼 404(未找到)。除非另有說(shuō)明,否則此響應(yīng)是可緩存的。
410 響應(yīng)的主要目的是通過(guò)通知接收者該資源故意不可用并且服務(wù)器所有者希望刪除到該資源的遠(yuǎn)程鏈接來(lái)協(xié)助 Web 維護(hù)任務(wù)。這種事件對(duì)于限時(shí)促銷(xiāo)服務(wù)和屬于不再在服務(wù)器站點(diǎn)工作的個(gè)人的資源很常見(jiàn)。沒(méi)有必要將所有永久不可用的資源標(biāo)記為“已消失”或?qū)?biāo)記保留任何時(shí)間 - 這由服務(wù)器所有者自行決定。
10.4.12 411 長(zhǎng)度要求
服務(wù)器拒絕接受沒(méi)有定義 Content-Length 的請(qǐng)求。如果客戶(hù)端在請(qǐng)求消息中添加了包含消息體長(zhǎng)度的有效 Content-Length 頭字段,則客戶(hù)端可以重復(fù)請(qǐng)求。
10.4.13 412 前置條件失敗
在服務(wù)器上測(cè)試時(shí),一個(gè)或多個(gè)請(qǐng)求標(biāo)頭字段中給出的前提條件評(píng)估為假。此響應(yīng)代碼允許客戶(hù)端對(duì)當(dāng)前資源元信息(標(biāo)頭字段數(shù)據(jù))設(shè)置先決條件,從而防止將請(qǐng)求的方法應(yīng)用于預(yù)期之外的資源。
10.4.14 413 請(qǐng)求實(shí)體太大
服務(wù)器拒絕處理請(qǐng)求,因?yàn)檎?qǐng)求實(shí)體大于服務(wù)器愿意或能夠處理的大小。服務(wù)器可以關(guān)閉連接以阻止客戶(hù)端繼續(xù)請(qǐng)求。
如果條件是臨時(shí)的,服務(wù)器應(yīng)該包含一個(gè) Retry-After 頭域來(lái)指示它是臨時(shí)的,并且在什么時(shí)間之后客戶(hù)端可以重試。
10.4.15 414 請(qǐng)求 URI 太長(zhǎng)
服務(wù)器拒絕為請(qǐng)求提供服務(wù),因?yàn)?Request-URI 比服務(wù)器愿意解釋的要長(zhǎng)。這種罕見(jiàn)的情況只有在客戶(hù)端錯(cuò)誤地將 POST 請(qǐng)求轉(zhuǎn)換為具有長(zhǎng)查詢(xún)信息的 GET 請(qǐng)求時(shí)才可能發(fā)生,此時(shí)客戶(hù)端已下降到重定向的 URI“黑洞”(例如,重定向的 URI 前綴指向本身的后綴),或者當(dāng)服務(wù)器受到客戶(hù)端的攻擊時(shí),客戶(hù)端試圖利用某些服務(wù)器中存在的安全漏洞,使用固定長(zhǎng)度的緩沖區(qū)來(lái)讀取或操作 Request-URI。
10.4.16 415 不支持的媒體類(lèi)型
服務(wù)器拒絕為請(qǐng)求提供服務(wù),因?yàn)檎?qǐng)求的實(shí)體采用所請(qǐng)求方法的請(qǐng)求資源不支持的格式。
10.4.17 416 請(qǐng)求的范圍不滿(mǎn)足
如果請(qǐng)求包含 Range 請(qǐng)求標(biāo)頭字段(第 14.35 節(jié)),并且此字段中的范圍說(shuō)明符值沒(méi)有與所選資源的當(dāng)前范圍重疊,并且請(qǐng)求沒(méi)有包括一個(gè) If-Range 請(qǐng)求頭字段。(對(duì)于字節(jié)范圍,這意味著所有字節(jié)范圍規(guī)范值的第一個(gè)字節(jié)位置都大于所選資源的當(dāng)前長(zhǎng)度。)
當(dāng)為字節(jié)范圍請(qǐng)求返回此狀態(tài)代碼時(shí),響應(yīng)應(yīng)該包含一個(gè) Content-Range 實(shí)體頭字段,指定所選資源的當(dāng)前長(zhǎng)度(參見(jiàn)第 14.16節(jié))。此響應(yīng)不得使用 multipart/byteranges 內(nèi)容類(lèi)型。
10.4.18 417 預(yù)期失敗
此服務(wù)器無(wú)法滿(mǎn)足在 Expect 請(qǐng)求頭字段(參見(jiàn)第 14.20 節(jié))中給出的期望,或者,如果服務(wù)器是代理,則服務(wù)器有明確的證據(jù)表明下一跳服務(wù)器無(wú)法滿(mǎn)足該請(qǐng)求.
10.5服務(wù)器錯(cuò)誤 5xx
以數(shù)字“5”開(kāi)頭的響應(yīng)狀態(tài)代碼表示服務(wù)器知道它已經(jīng)出錯(cuò)或無(wú)法執(zhí)行請(qǐng)求的情況。除了響應(yīng) HEAD 請(qǐng)求時(shí),服務(wù)器應(yīng)該包含一個(gè)實(shí)體,其中包含對(duì)錯(cuò)誤情況的解釋,以及它是暫時(shí)的還是永久的情況。用戶(hù)代理應(yīng)該向用戶(hù)顯示任何包含的實(shí)體。這些響應(yīng)代碼適用于任何請(qǐng)求方法。
10.5.1 500 內(nèi)部服務(wù)器錯(cuò)誤
服務(wù)器遇到了一個(gè)意外情況,導(dǎo)致它無(wú)法完成請(qǐng)求。
10.5.2 501 未實(shí)施
服務(wù)器不支持完成請(qǐng)求所需的功能。當(dāng)服務(wù)器無(wú)法識(shí)別請(qǐng)求方法并且無(wú)法支持任何資源時(shí),這是適當(dāng)?shù)捻憫?yīng)。
10.5.3 502 錯(cuò)誤網(wǎng)關(guān)
服務(wù)器在充當(dāng)網(wǎng)關(guān)或代理時(shí),在嘗試滿(mǎn)足請(qǐng)求時(shí)從它訪問(wèn)的上游服務(wù)器接收到無(wú)效響應(yīng)。
10.5.4 503 服務(wù)不可用
由于服務(wù)器臨時(shí)過(guò)載或維護(hù),服務(wù)器當(dāng)前無(wú)法處理請(qǐng)求。這意味著這是一種暫時(shí)的情況,經(jīng)過(guò)一段時(shí)間的延遲會(huì)得到緩解。如果已知,延遲的長(zhǎng)度可以在 Retry-After 標(biāo)頭中指示。如果沒(méi)有給出 Retry-After,客戶(hù)端應(yīng)該像處理 500 響應(yīng)一樣處理響應(yīng)。
注意:503 狀態(tài)碼的存在并不意味著 服務(wù)器在過(guò)載時(shí)必須使用它。一些服務(wù)器可能希望 簡(jiǎn)單地拒絕連接。
10.5.5 504 網(wǎng)關(guān)超時(shí)
服務(wù)器在充當(dāng)網(wǎng)關(guān)或代理時(shí),沒(méi)有收到來(lái)自 URI 指定的上游服務(wù)器(例如 HTTP、FTP、LDAP)或它在嘗試完成時(shí)需要訪問(wèn)的其他輔助服務(wù)器(例如 DNS)的及時(shí)響應(yīng)請(qǐng)求。
注意:實(shí)現(xiàn)者注意:一些部署的代理是已知的 當(dāng) DNS 查詢(xún)超時(shí)時(shí)返回 400 或 500。
10.5.6 505 HTTP 版本不支持
服務(wù)器不支持或拒絕支持請(qǐng)求消息中使用的 HTTP 協(xié)議版本。服務(wù)器表示它無(wú)法或不愿意使用與客戶(hù)端相同的主要版本完成請(qǐng)求,如第 3.1節(jié)所述,除了此錯(cuò)誤消息。響應(yīng)應(yīng)該包含一個(gè)實(shí)體,描述為什么不支持該版本以及該服務(wù)器支持哪些其他協(xié)議。

