[英]Content-Length header and Internal Server Error
我有一個 PHP 驅動的網站,它使用輸出緩沖,生成整個頁面並在發送實際頁面內容之前吐出幾個標題( Content-Type
和Content-Length
)。
這在我的本地 Apache 服務器上運行良好,但是一旦我將它上傳到我的網絡主機(也是 Apache),它就失敗了,出現了 500 內部服務器錯誤,我最終追蹤到了Content-Length
標頭。 我只是刪除了標題(它並不重要)並且它工作正常。
現在我只是好奇為什么會發生這種情況 - 是否有某種服務器設置禁止腳本添加此特定標頭?
我可能是錯的,但我認為它被可選的 PHP 安全設置之一或許多服務器使用的 Suhosin PHP 保護系統所禁止。
我想我記得讀過一些關於Content-Length
和實際內容長度之間的不匹配如何被用於漏洞利用的文章,因此,PHP+Suhosin 和瀏覽器的xmlHttpRequest
Javascript 對象都堅持為您設置該標頭。
通常,如果您在已發送正文的某些部分之后設置響應頭,則會出現錯誤。 有可能在生產中內容的大小大於輸出緩沖區,因此服務器開始向客戶端發送數據。 這很可能會導致您描述的錯誤。
嘗試回答這些問題,您應該最終得到解決方案 -
不確定這是否相關,但我遇到了一個問題,即設置 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.