1. 程式人生 > >http的重定向狀態碼302,303,307

http的重定向狀態碼302,303,307

    這三個狀態碼在平時都表現為重定向,伺服器返回一個新的資源的地址,客戶端去這個新的地址去獲取資源。但是它們之間還是有些細微的區別的。我們通過仔細閱讀RFC可以發現:

302 Found

    302返回碼指示資源臨時在另一個位置,該位置通過Location指定。如果302響應對應的請求方法不是GET或者HEAD,那麼客戶端在獲得使用者許可之前是不能自動進行重定向的,因為這有可能會改變請求的條件。在RFC1045和RFC2068中指明客戶端在響應重定向時是不可以改變請求的方法的。但是在多數實現中,總是使用GET方法來獲取新位置的資源。這樣就將其實現為303的要求了。

303 See Other

    請求的資源可以在另一個URI處找到,客戶端必須使用GET方法來獲取新位置的資源。不能快取303響應,但是可以快取第二次請求的響應。This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource.很多客戶端識別303狀態碼,302狀態碼的實現其實就是對303狀態碼的響應。

307 Temporary Redirect

    同303一樣,對於非GET和HEAD請求不能自動重定向。與302的區別是: The Web client issues a request to the new location of the resource using the same request method it used in the current transaction (rather than always using GET).也就是說307相較於302來說,後續請求資源的方法是使用與當前互動相同的方法而不是全部使用GET。

由此可見

    303和307的出現是明確了302中的混亂狀態。建議以後使用303和307,302在以後將會被淘汰掉。