2010-09-04 71 views
0

我有一個PHP驅動的網站,它使用輸出緩衝,生成整個頁面並在發送實際頁面內容之前吐出幾個標題(Content-TypeContent-Length)。內容長度標題和內部服務器錯誤

這對我的本地Apache服務器正常工作,但只要我將其上傳到我的網絡主機(也是Apache),它失敗了500內部服務器錯誤,我終於追溯到Content-Length標題。我只是刪除標題(這不是很重要),它工作正常。

現在我只是好奇,爲什麼這發生在第一個地方 - 是否有某種服務器設置,禁止腳本添加此特定的標頭?

+0

最好的辦法是查看服務器'error.log'中的詳細消息。 – 2010-09-04 21:46:52

+0

@皮卡:不幸的是我沒有訪問權限。 – casablanca 2010-09-04 23:31:54

+0

正在部署w /反向代理 – bestsss 2012-02-04 11:34:29

回答

1

我可能是錯的,但我認爲這是任何一個可選的PHP安全設置或許多服務器使用的Suhosin PHP保護系統所不允許的。

我想我會記得閱讀Content-Length與實際內容長度之間的不匹配情況是否可以用於漏洞利用,因此,PHP + Suhosin和瀏覽器的Javascript對象堅持爲您設置該標頭。

+0

+1可能的原因,但我懷疑這是我的原因:我無法在服務器的響應中找到任何「Content-Length」標頭。 – casablanca 2010-09-04 23:41:55

+0

適用原因仍然有可能。在某些情況下拒絕設置內容長度當然可以成爲有效的安全措施。至於不能檢查你的服務器日誌,我建議在服務器上運行'phpinfo()',然後設置一個測試服務器來匹配。 – ssokolow 2010-09-05 18:29:03

0

通常,如果您在正文的某些部分已經發送後設置了響應標題,則會出現錯誤。在生產中,內容的大小可能大於輸出緩衝區,因爲服務器可能會將數據發送到客戶端。這很可能會導致您描述的錯誤。

嘗試回答這些問題,你應該與解決方案最終會 -

  1. 使用HTTP代理,並檢查錯誤響應。你會得到一些HTML內容以及500錯誤代碼嗎?
  2. 輸出緩衝區的大小是多少,並且是大於緩衝區大小的響應的大小?
  3. 生產中的緩衝區大小是否與本地機器相同?
+0

標題前絕對沒有內容。正如我所提到的,我可以毫無問題地設置不同的頭文件('Content-Type')。它只是導致錯誤的「Content-Length」標題。 – casablanca 2010-09-05 13:58:04