2012-04-20 210 views
0

我試圖設置自定義HTTP 1.0狀態碼,以便通過AJAX(使用jQuery)返回更多描述性錯誤消息。在PHP中設置LiteSpeed的自定義HTTP響應標頭

在PHP我有類似:

header('HTTP/1.0 909 Hello World'); 
exit; 

這將按預期在使用Apache 2.2.15我的開發環境,但它不能在運行的Litespeed 5.5生產Web服務器的工作。 LiteSpeed返回200 OK

使用此:

header('HTTP/1.0 404 Hello World'); 
exit; 

阿帕奇返回404與上面的文字。 LiteSpeed用默認的「未找到」替換自定義文本。

任何想法如何在LiteSpeed中重寫此功能以使其與Apache相同?我知道他們應該是可比的網絡服務器。

任何想法,請讓我知道。

-P。

回答

0

首先,爲什麼HTTP 1.0而不是1.1?

其次,您正在嘗試執行HTTP規範中沒有定義的事情。 LiteSpeed可能會檢查被要求發送的標題,並用一些默認值替換它無法識別的值。

您不應該試圖強制HTTP以非標準方式運行,只要您這樣做,它就不再是HTTP。這些規範是爲了確保不同人員在不同時間實現的軟件可以互操作,以及如果不遵循規範應該如何表現的規則完全沒有定義。

Apache讓它不知道的頭是完全可以接受的行爲,LiteSpeed的行爲也是拒絕讓它通過。在這種情況下,讓惡魔從你鼻子裏飛出對於服務器來說也是有效的。客戶端意味着如何處理它無法識別的HTTP響應代碼?

如果您需要在標題中發送附加信息,爲什麼不添加新標題?以下應該做的。

header ('X-My-App-Header: Hello World!'); 
+0

所有的有效點,也許我應該採用'X-Custom-Error:Hello World'來代替更好的跨平臺兼容性。 爲了迴應用戶用它做什麼,那麼我會解釋/處理響應以提供更具描述性的錯誤信息,這樣就不是真正的問題。 儘管如此,我認爲這可能不是最佳實踐,所以歡迎更好的替代方案來實現上述目標。 – paperclip 2012-04-20 11:54:07

+1

就像我建議的那樣,您可以只附加自定義標題(名稱以X開頭),以傳達超出HTTP規範允許您返回的信息。 HTTP確實也有一套相當豐富的預定義狀態代碼,所以我建議從可用的最適合情況的代碼中返回一個有效的HTTP狀態代碼,以及一個包含更多信息的X標頭。 – GordonM 2012-04-20 12:00:11