什么是 HTTP 重定向?
HTTP 重定向(HTTP Redirect) 是服務器向客戶端(通常是瀏覽器)發出的指令,告訴客戶端某個請求的資源已被移到新的位置。重定向通常通過發送一個特殊的 HTTP 狀態碼(例如 3xx 系列狀態碼)和一個 Location 頭,指示客戶端去訪問新的 URL。
重定向的場景
永久重定向(Permanent Redirect)
永久重定向 是 HTTP 狀態碼 301 和 308 所代表的重定向類型,用于告知客戶端和搜索引擎,某個資源已永久遷移到新位置。這些重定向的關鍵在于 "永久",即原始 URL 將不再有效,應該替換為新 URL。永久重定向不僅影響瀏覽器,還會被搜索引擎、RSS 訂閱器和其他網絡爬蟲采納,用來更新資源的地址。
狀態碼 | 描述 | 請求方法變化 | 應用場景 |
---|---|---|---|
301 | 永久移動(Moved Permanently) | GET 方法不變,其他方法可能會改變為 GET | 網站遷移、URL 改變、搜索引擎優化、重定向舊資源到新資源 |
308 | 永久重定向(Permanent Redirect) | 請求方法保持不變(包括非 GET 請求,如 POST、PUT 等) | 網站遷移或 URL 重構時,要求保持原請求方法不變的情況 |
臨時重定向(Temporary Redirect)
臨時重定向 用于告訴客戶端某個資源當前無法從原位置訪問,但可以通過臨時的另一個 URL 來訪問。它是指 短期的變動,意味著 客戶端不應更新其緩存或鏈接,也不應將新的 URL 視為資源的永久位置。
狀態碼 | 描述 | 請求方法變化 | 請求體變化 | 應用場景 |
---|---|---|---|---|
302 | 臨時重定向(Found) | GET 方法不變,其他方法可能變為 GET | 請求體可能被丟棄 | 頁面暫時不可用,服務器引導客戶端到其他地方 |
303 | 查看其他(See Other) | 請求方法變為 GET | 請求體丟失 | 用于 POST 或 PUT 請求后,避免重復提交數據 |
307 | 臨時重定向(Temporary Redirect) | 請求方法不變 | 請求體不變 | 非 GET 請求時,確保方法和請求體不被改變 |
特殊重定向(Special Redirections)
除了常見的永久和臨時重定向,HTTP 還定義了兩種特殊類型的重定向:304 (Not Modified) 和 300 (Multiple Choices)。這兩種狀態碼在特定的場景下用于優化用戶體驗或提供選擇性重定向。
狀態碼 | 描述 | 響應體 | 用途 |
---|---|---|---|
304 | 未修改(Not Modified) | 無響應體 | 用于緩存驗證,告訴客戶端緩存的資源未被修改,可以繼續使用本地緩存 |
300 | 多種選擇(Multiple Choices) | 含有多個可選的 URL | 服務器提供多個資源供客戶端選擇,用戶需手動選擇訪問哪個資源 |
無限重定向
重定向循環是指一個頁面不斷地被重定向到另一個頁面,而新的頁面又重定向回原來的頁面,形成一個無法結束的循環,導致無法訪問任何頁面。這種問題通常是服務器配置錯誤引起的,如果服務器能檢測到這個問題,它可能會返回 500 內部服務器錯誤
參考
Redirections in HTTP - HTTP | MDN