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