2011-08-02 43 views
2

我想在PHP腳本來設置響應代碼爲200。後來我設置了Location頭,它設置爲302。根據該文件:無法響應代碼設置爲200 PHP

它不僅會將此標題發送回瀏覽器,還會向瀏覽器返回一個REDIRECT(302)狀態代碼,除非已經設置了201xx或 3xx狀態代碼。

是否沒有辦法將標題設置爲200並且沒有location標題覆蓋它?我嘗試在位置標題後面設置響應代碼標題,但這不起作用(可能是因爲位置標題已經與包括「找到」HTML位在內的正文一起發送)。

我可以使用201作爲響應代碼,因爲應用程序accecssing腳本只有用於任何2xx的代碼檢查。但是,根據HTTP 1.1規範:

原始服務器必須在返回201狀態代碼之前創建資源。

但我不會創建任何東西。這是一個問題,還是我可以擺脫它?

+1

爲什麼200如果你重定向? – JJJ

+0

這有點令人困惑的原因,但相同的腳本被稱爲從兩個地方,一個需要200響應代碼,一個需要的位置......雖然我可能有一個地方發送一些其他參數確定Location:標頭是否應該發送。哎呀,回答了我自己的問題。 –

回答

0

嗯,我找到了一個解決我的問題的答案。我原來的問題是,一個地方需要redirect標題,另一個地方需要HTTP/1.1 200 OK標題,所以我能夠使用一個或另一個取決於來源。

然而,試圖在201選項,沒有任何工作,(還是302),所以我不知道這是否是一個錯誤,或者如果我做錯了還是什麼之後。

+1

先生,我詳細解釋了爲什麼它在我的回答中不起作用:它*應該*不起作用,因爲狀態200與「位置」重定向一起失效。這是違反標準,所以它是好的,它沒有工作:) –

+0

但爲什麼沒有工作,這是記錄,它應該正常工作,但沒有? –

+1

http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html,201(正如你在OP中討論的)是另一種情況。 PHP文檔甚至提到了這個代碼(http://php.net/manual/en/function.header.php) - 201意味着您的請求已成功處理,並暗示由於您的請求而創建了新的URI。 URI可以與狀態一起傳遞,但它不被認爲是用戶代理的「呼叫行爲」 - 代理不應該訪問給定的URI。相反,3xx代碼是對用戶代理的明確指示。 –

2

根據RFC 2616,帶有重定向的200狀態碼無效(請參閱10.3重定向3xx)。重定向時,只有3xx代碼有效。

您可以繼續,如果它是完成工作發送任意2XX代碼,但是這將是標準之外,所有用戶代理在理論上不可靠的。

+1

更不用說那些搜索引擎可能會將該頁面標記爲無效並停止將其編入索引。 – JJJ

+0

這不是我們擔心可以搜索的頁面。 –

+0

但使用CGI時有效,因爲它指示Web服務器執行內部重定向。 –

0

「位置:」在header()參數用於重定向。重定向是HTTP請求者(即用戶代理)用「位置」中給出的信息向服務器發送新請求的指令。

在因此任何時候設置與200的狀態碼是錯誤的,並且具有被忽略;這應該默認爲302.

如果你不想重定向,那麼不要設置位置!