結論
- 3XX開頭的HTTP狀態碼都表示重定向的回應,
- 301、308是永久重定向;302、303、307是臨時重定向,
- 301、302是http 1.0的內容,303、307、308是http1.1的內容,
- 301和302本來在規范中是不允許重定向時改變請求method的(將POST改為GET),實際許多瀏覽器實作的時候允許重定向時改變請求method,
- 303的出現是允許重定向時改變請求method,此外303回應禁止被快取,307、308則不允許重定向時改變請求method,
RFC 7231規定:
- 301 Moved Permanently,永久重定向
- 302 Found
- 303 See Other
- 307 Temporary Redirect
RFC 7538規定:
- 308 Permanent Redirect 永久重定向
301、302搜索引擎處理區別
- 301表示搜索引擎在抓去新內容的同時,將舊的網址替換為重定向之后的網址;
- 302表示舊地址的資源仍存在,重定向時臨時從A地址跳轉到B地址,搜索引擎會抓取新的內容,并繼續保存舊的網址,
臨時重定向:302、303與307
結論
- 302允許各種各樣的重定向,一般都實作為GET到GET重定向,但是不能確保POST會重定向為POST,
- 303只允許任意請求到GET的重定向,
- 307和302一樣,但不允許POST到GET的重定向,
302 Found
- 302表示目標資源臨時移動到了另一個URI上,由于重定向是臨時發生的,所以客戶端之后的請求中應該使用原本的URI,
- 回應header的Location會帶上重定向的URI,瀏覽器可以使用Location中的URI進行自動重定向,
- 注意:由于歷史原因,用戶代理可能會在重定向后的請求中把POST方法改為GET,如果不想這樣做,應該回應307(Temporary Redirect)狀態碼,
303 See Other
- 303表示服務器要將瀏覽器重定向到另一個資源,這個資源的URI會寫在回應Header的Location欄位,事實上,重定向到的資源并不是請求的資源,而是對請求資源的一些描述,
- 303 通常用于將POST請求重定向到GET請求,例如上傳了一份個人資訊,服務器回傳303回應,將你導向一個上傳成功頁面,
- 303 不管原請求是什么方法,重定向請求的都是GET(或者HEAD)
- 303回應禁止被快取,
307 Temporary Redirect
- 307的定義實際上和302是一致的,唯一區別在于,307狀態碼不允許瀏覽器將原本POST的請求重定向到GET請求上,
永久重定向:301、308
301 Moved Permanently
- 301表明目標資源被永久的移動到了一個新的URI,任何未來對這個資源的參考都應該使用新的URI,
308 Permanent Redirect
- 308與301定義一致,唯一的區別在于,308狀態碼不允許瀏覽器將原本為POST的請求重頂到GET請求上,
參考:
https://www.cnblogs.com/wuguanglin/p/redirect.html
https://zhuanlan.zhihu.com/p/60669395
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/34072.html
標籤:HTML5
