2012-06-22 72 views

回答

-2

我相信對於這種情況,HTTP 303可能是最合適的狀態碼,儘管它可能與預先HTTP 1.1客戶端不兼容。

HTTP 303狀態代碼狀態(注:我已經加粗,我覺得是最重要的部分):對請求的響應可以根據不同的URI下找到 並且應該使用GET方法對資源進行檢索。此方法主要用於允許POST激活的腳本的輸出將用戶代理重定向到選定的資源。 新的URI不是最初請求的資源的替代參考。 303響應絕不能被緩存,但對第二個(重定向)請求的響應可能是可緩存的。

+1

實際上,您應該使用粗體顯示文本的相反部分:「此方法主要用於允許POST激活的腳本的輸出將用戶代理重定向到選定的資源「。 – Gumbo

1

如果請求者有一個URI用於允許它們在沒有重定向的情況下結束相同的地方,那麼303有意義(as sjstrutt answered),因爲它們應該使用新位置的URI。如果不是的話,302對我來說是有意義的,因爲他們應該繼續爲將來的請求使用請求URI,因爲那樣你會將它們重定向到缺少可以請求的URI的位置。

繼承人什麼w3.org說,大約302狀態碼:

10.3.3 302發現

請求的資源暫時位於不同URI所在。 由於重定向有時可能會發生變化,因此客戶端應該繼續使用Request-URI作爲將來的請求。該響應爲 只有在緩存控制或Expires報頭 字段指示的情況下才可緩存。

臨時URI應該由 響應中的位置字段給出。除非請求方法是HEAD,否則 響應的實體應該包含一個超文本鏈接,其中包含超鏈接到新URI的超鏈接。

如果302個狀態代碼是響應於比 GET或HEAD其他的請求接收的時,用戶代理不必自動重定向 請求,除非它可以由用戶來確認,因爲這可能 改變下的條件該請求已經發出。

...

重點煤礦。另外:CodeIgniter的redirect()函數默認爲302,但提到301可能用於搜索引擎重定向。很明顯,這是他們的決定,但我想我會把它放到組合中,因爲它是一個廣泛使用的Web框架,我認爲他們已經考慮了一些問題。

1

成功內容協商的適當響應狀態碼是301,302307,具體取決於重定向是永久還是隻是臨時。

但是在任何情況下,服務器驅動的協商應該總是說明決策所依據的信息。在HTTP中,它是響應頭字段,它指定在此過程中使用的請求頭字段的列表。

不幸的是,客戶端的IP地址(我想你正在將它們轉換成地理位置信息)在這裏不是一個選項。因此,永久重定向也不是一個選項,除非您指出響應不被緩存,否則它可能會被客戶端或中介代理緩存。所以我要麼使用302或307。