HTTP中的30一、30二、30三、30七、308

結論

  • 3XX開頭的HTTP狀態碼都表示重定向的響應。
  • 30一、308是永久重定向;30二、30三、307是臨時重定向。
  • 30一、302是http 1.0的內容,30三、30七、308是http1.1的內容。
  • 301和302原本在規範中是不容許重定向時改變請求method的(將POST改成GET),實際許多瀏覽器實現的時候容許重定向時改變請求method。
  • 303的出現是容許重定向時改變請求method。此外303響應禁止被緩存。30七、308則不容許重定向時改變請求method。

RFC 7231規定:

  • 301 Moved Permanently,永久重定向
  • 302 Found
  • 303 See Other
  • 307 Temporary Redirect

RFC 7538規定:

  • 308 Permanent Redirect 永久重定向

30一、302搜索引擎處理區別

  • 301表示搜索引擎在抓去新內容的同時,將舊的網址替換爲重定向以後的網址;
  • 302表示舊地址的資源仍存在,重定向時臨時從A地址跳轉到B地址,搜索引擎會抓取新的內容,並繼續保存舊的網址。

臨時重定向:30二、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請求上。

永久重定向:30一、308

301 Moved Permanently

  • 301代表目標資源被永久的移動到了一個新的URI,任何將來對這個資源的引用都應該使用新的URI。

308 Permanent Redirect

  • 308與301定義一致,惟一的區別在於,308狀態碼不容許瀏覽器將本來爲POST的請求重頂到GET請求上。

參考:html

https://www.cnblogs.com/wuguanglin/p/redirect.html瀏覽器

https://zhuanlan.zhihu.com/p/60669395緩存

相關文章
相關標籤/搜索