3XX 響應(yīng)結(jié)果表明瀏覽器需要執(zhí)行某些特殊的處理以正確處理請(qǐng)求。
(1)301 Moved Permanently
永久重定向。該狀態(tài)碼表示請(qǐng)求的資源已經(jīng)被分配了新的 URI,以后應(yīng)使用資源指定的 URI。新的 URI 會(huì)在 HTTP 響應(yīng)頭中的 Location 首部字段指定。若用戶已經(jīng)把原來(lái)的URI保存為書(shū)簽,此時(shí)會(huì)按照 Location 中新的URI重新保存該書(shū)簽。同時(shí),搜索引擎在抓取新內(nèi)容的同時(shí)也將舊的網(wǎng)址替換為重定向之后的網(wǎng)址。
使用場(chǎng)景:
當(dāng)我們想換個(gè)域名,舊的域名不再使用時(shí),用戶訪問(wèn)舊域名時(shí)用301就重定向到新的域名。其實(shí)也是告訴搜索引擎收錄的域名需要對(duì)新的域名進(jìn)行收錄。
在搜索引擎的搜索結(jié)果中出現(xiàn)了不帶www的域名,而帶www的域名卻沒(méi)有收錄,這個(gè)時(shí)候可以用301重定向來(lái)告訴搜索引擎我們目標(biāo)的域名是哪一個(gè)。
(2)302 Found
臨時(shí)重定向。該狀態(tài)碼表示請(qǐng)求的資源被分配到了新的 URI,希望用戶(本次)能使用新的 URI 訪問(wèn)資源。和 301 Moved Permanently 狀態(tài)碼相似,但是 302 代表的資源不是被永久重定向,只是臨時(shí)性質(zhì)的。也就是說(shuō)已移動(dòng)的資源對(duì)應(yīng)的 URI 將來(lái)還有可能發(fā)生改變。若用戶把 URI 保存成書(shū)簽,但不會(huì)像 301 狀態(tài)碼出現(xiàn)時(shí)那樣去更新書(shū)簽,而是仍舊保留返回 302 狀態(tài)碼的頁(yè)面對(duì)應(yīng)的 URI。同時(shí),搜索引擎會(huì)抓取新的內(nèi)容而保留舊的網(wǎng)址。因?yàn)榉?wù)器返回302代碼,搜索引擎認(rèn)為新的網(wǎng)址只是暫時(shí)的。
使用場(chǎng)景:
當(dāng)我們?cè)谧龌顒?dòng)時(shí),登錄到首頁(yè)自動(dòng)重定向,進(jìn)入活動(dòng)頁(yè)面。
未登陸的用戶訪問(wèn)用戶中心重定向到登錄頁(yè)面。
訪問(wèn)404頁(yè)面重新定向到首頁(yè)。
(3)303 See Other
該狀態(tài)碼表示由于請(qǐng)求對(duì)應(yīng)的資源存在著另一個(gè) URI,應(yīng)使用 GET 方法定向獲取請(qǐng)求的資源。 303 狀態(tài)碼和 302 Found 狀態(tài)碼有著相似的功能,但是 303 狀態(tài)碼明確表示客戶端應(yīng)當(dāng)采用 GET 方法獲取資源。
303 狀態(tài)碼通常作為 PUT 或 POST 操作的返回結(jié)果,它表示重定向鏈接指向的不是新上傳的資源,而是另外一個(gè)頁(yè)面,比如消息確認(rèn)頁(yè)面或上傳進(jìn)度頁(yè)面。而請(qǐng)求重定向頁(yè)面的方法要總是使用 GET。
注意:
當(dāng) 301、302、303 響應(yīng)狀態(tài)碼返回時(shí),幾乎所有的瀏覽器都會(huì)把 POST 改成GET,并刪除請(qǐng)求報(bào)文內(nèi)的主體,之后請(qǐng)求會(huì)再次自動(dòng)發(fā)送。
301、302 標(biāo)準(zhǔn)是禁止將 POST 方法變成 GET方法的,但實(shí)際大家都會(huì)這么做。
(4)304 Not Modified
瀏覽器緩存相關(guān)。 該狀態(tài)碼表示客戶端發(fā)送附帶條件的請(qǐng)求時(shí),服務(wù)器端允許請(qǐng)求訪問(wèn)資源,但未滿足條件的情況。304 狀態(tài)碼返回時(shí),不包含任何響應(yīng)的主體部分。304 雖然被劃分在 3XX 類(lèi)別中,但是和重定向沒(méi)有關(guān)系。
帶條件的請(qǐng)求(Http 條件請(qǐng)求):使用 Get方法 請(qǐng)求,請(qǐng)求報(bào)文中包含(if-match、if-none-match、if-modified-since、if-unmodified-since、if-range)中任意首部。
狀態(tài)碼304并不是一種錯(cuò)誤,而是告訴客戶端有緩存,直接使用緩存中的數(shù)據(jù)。返回頁(yè)面的只有頭部信息,是沒(méi)有內(nèi)容部分的,這樣在一定程度上提高了網(wǎng)頁(yè)的性能。
(5)307 Temporary Redirect
307表示臨時(shí)重定向。 該狀態(tài)碼與 302 Found 有著相同含義,盡管 302 標(biāo)準(zhǔn)禁止 POST 變成 GET,但是實(shí)際使用時(shí)還是這樣做了。
307 會(huì)遵守瀏覽器標(biāo)準(zhǔn),不會(huì)從 POST 變成 GET。但是對(duì)于處理請(qǐng)求的行為時(shí),不同瀏覽器還是會(huì)出現(xiàn)不同的情況。規(guī)范要求瀏覽器繼續(xù)向 Location 的地址 POST 內(nèi)容。規(guī)范要求瀏覽器繼續(xù)向 Location 的地址 POST 內(nèi)容。