HTTP 協(xié)議狀態(tài)碼-3XX
3XX
代表重定向,代表需要客戶端采取進(jìn)一步的操作才能完成請(qǐng)求。通常,這些狀態(tài)碼用來重定向,后續(xù)的請(qǐng)求地址(重定向目標(biāo))在本次響應(yīng)的 Location 域中指明。
1. 300 Multiple Choices
有多個(gè)重定向的值,需要客戶端自己選擇, Location
的值是服務(wù)端建議的值。
HTTP/1.1 300 Multiple Choices
Access-Control-Allow-Headers: Content-Type,User-Agent
Access-Control-Allow-Origin: *
Link: </foo> rel="alternate"
Link: </bar> rel="alternate"
Content-Type: text/html
Location: /foo
2. 301 Moved Permanently
請(qǐng)求的資源已經(jīng)永久性的轉(zhuǎn)移了,新資源 URI 在頭部 Location
指明,這時(shí)候如果瀏覽器有書簽,或者請(qǐng)求地址的緩存,最好都能替換成 Location
對(duì)應(yīng)的值。
HTTP/1.1 301 Moved Permanently
Location: https://www.imocc.com/http/301-moved-permanently
3. 302 Found
跟 301
相似,只是 302
代表的資源轉(zhuǎn)移地址是臨時(shí)的。
4. 303 See Other
303
狀態(tài)碼和 302
狀態(tài)碼有著相同的功能,但 303
狀態(tài)碼明 確表示客戶端應(yīng)當(dāng)采用 GET 方法 請(qǐng)求 Location 的地址獲取資源。
如果是以 POST 訪問某個(gè)請(qǐng)求,返回 303
,此時(shí)應(yīng)該換成 GET 方法去請(qǐng)求新地址。
5. 304 Not Modified
一般是在有緩存的情況下,客戶端發(fā)起資源獲取請(qǐng)求,服務(wù)端判斷之前的資源未修改過,可以繼續(xù)使用緩存的資源。經(jīng)??蛻舳苏?qǐng)求的頭部會(huì)帶上 If-None-Match
If-Modified-Since
If-Match
等帶有條件的頭部字段。
客戶端
GET /foo HTTP/1.1
Accept: text/html
If-None-Match: "some-string"
服務(wù)端
HTTP/1.1 304 Not Modified
ETag: "some-string"
6. 305 Use Proxy
被請(qǐng)求的資源必須通過指定的代理才能被訪問。Location 域中將給出指定的代理所在的 URI 信息,接收者需要重復(fù)發(fā)送一個(gè)單獨(dú)的請(qǐng)求,通過這個(gè)代理才能訪問相應(yīng)資源。只有原始服務(wù)器才能建立305響應(yīng)。
HTTP/1.1 305 Use Proxy
Location: https://proxy.example.org:8080/
7. 306 Switch Proxy
客戶端已經(jīng)是在代理模式,服務(wù)端可能出于安全因素,提示客戶端需要切換一個(gè)新的代理。
306 在新的規(guī)范中已經(jīng)不在使用,該編碼保留。
HTTP/1.1 306 Switch Proxy
Set-Proxy: SET; proxyURI="https://proxy.imooc.com:8080/" scope="http://", seconds=100
8. 307 Temporary Redirect
307
跟 302
一樣,都是對(duì)臨時(shí)資源的重定向,不同的是 307
明確要求重定向的請(qǐng)求必須跟第一次的請(qǐng)求類型一樣。第一次是 GET 第二次也必須是 GET,同樣如果第一次是 POST,第二次也必須是 POST。302
則沒有這么明確的要求,這可能導(dǎo)致有些瀏覽器第一次發(fā)出 POST,第二次卻用 GET 重定向,而第二次實(shí)際上要求的是 POST,就容易出錯(cuò)。
307
是后面新增加的,這里提倡用 307
代替 302
。