天天看點

HTTP中的301、302、303、307、308

結論

  • 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表示伺服器要将浏覽器重定向到另一個資源,這個資源的URI會寫在響應Header的Location字段。事實上,重定向到的資源并不是請求的資源,而是對請求資源的一些描述。
  • 303 通常用于将POST請求重定向到GET請求。例如上傳了一份個人資訊,伺服器傳回303響應,将你導向一個上傳成功頁面。
  • 303 不管原請求是什麼方法,重定向請求的都是GET(或者HEAD)
  • 303響應禁止被緩存。

  • 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

作者:AmyZYX

出處:http://www.cnblogs.com/amyzhu/

本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接配接,否則保留追究法律責任的權利。