簡體   English   中英

內容長度標頭和內部服務器錯誤

[英]Content-Length header and Internal Server Error

我有一個 PHP 驅動的網站,它使用輸出緩沖,生成整個頁面並在發送實際頁面內容之前吐出幾個標題( Content-TypeContent-Length )。

這在我的本地 Apache 服務器上運行良好,但是一旦我將它上傳到我的網絡主機(也是 Apache),它就失敗了,出現了 500 內部服務器錯誤,我最終追蹤到了Content-Length標頭。 我只是刪除了標題(它並不重要)並且它工作正常。

現在我只是好奇為什么會發生這種情況 - 是否有某種服務器設置禁止腳本添加此特定標頭?

我可能是錯的,但我認為它被可選的 PHP 安全設置之一或許多服務器使用的 Suhosin PHP 保護系統所禁止。

我想我記得讀過一些關於Content-Length和實際內容長度之間的不匹配如何被用於漏洞利用的文章,因此,PHP+Suhosin 和瀏覽器的xmlHttpRequest Javascript 對象都堅持為您設置該標頭。

通常,如果您在已發送正文的某些部分之后設置響應頭,則會出現錯誤。 有可能在生產中內容的大小大於輸出緩沖區,因此服務器開始向客戶端發送數據。 這很可能會導致您描述的錯誤。

嘗試回答這些問題,您應該最終得到解決方案 -

  1. 使用 http 代理並檢查錯誤響應。 您是否收到一些 html 內容以及 500 錯誤代碼?
  2. 輸出緩沖區的大小是多少,響應的大小是否大於緩沖區大小?
  3. 與本地機器相比,生產中的緩沖區大小是否相同?

不確定這是否相關,但我遇到了一個問題,即設置 Content-Length 導致 Postman 在我的開發機器上返回“解析錯誤:服務器返回格式錯誤的響應”。 我發現它是由添加到輸出中的警告引起的,導致它與我提供的內容長度不同。

例如輸出是

<br />
<b>Warning</b>:  Undefined array key "my typo" in <b>path and filename.php</b> 
on line <b>123</b><br />
... my actual response here...

我的內容長度僅適用於我的實際響應文本等。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM