Php 内容长度标头和内部服务器错误
我有一个PHP驱动的网站,它使用输出缓冲,生成整个页面,并在发送实际页面内容之前吐出几个标题(Php 内容长度标头和内部服务器错误,php,apache,http,Php,Apache,Http,我有一个PHP驱动的网站,它使用输出缓冲,生成整个页面,并在发送实际页面内容之前吐出几个标题(Content-Type和Content-Length) 这在我的本地Apache服务器上运行良好,但当我将其上传到我的web主机(也是Apache)时,它就失败了,出现了500个内部服务器错误,我最终跟踪到了Content Length头。我只是删除了标题(这不是很重要),它的工作很好,因为 现在我只是想知道为什么会发生这种情况——是否有某种服务器设置禁止脚本添加此特定头?我可能错了,但我认为这是不允
Content-Type
和Content-Length
)
这在我的本地Apache服务器上运行良好,但当我将其上传到我的web主机(也是Apache)时,它就失败了,出现了500个内部服务器错误,我最终跟踪到了Content Length
头。我只是删除了标题(这不是很重要),它的工作很好,因为
现在我只是想知道为什么会发生这种情况——是否有某种服务器设置禁止脚本添加此特定头?我可能错了,但我认为这是不允许的,无论是可选的PHP安全设置还是许多服务器使用的Suhosin PHP保护系统
我想我记得读过一些关于
内容长度
和实际内容长度之间的不匹配如何被用于漏洞利用的文章,因此,PHP+Suhosin和浏览器的xmlHttpRequest
Javascript对象都坚持要为您设置标题,如果在已发送正文的某些部分之后设置响应标头,则会出现错误。在生产环境中,内容的大小可能大于输出缓冲区,因此服务器开始向客户机发送数据。这可能会导致您描述的错误
试着回答这些问题,你应该得到解决方案-
最好的办法是在服务器
错误中查看详细消息。log
@Pekka:很遗憾,我没有访问权限。我们部署w/a reverse proxy+1可能是出于某种原因,但我怀疑这就是我的原因:我在服务器的响应中找不到任何内容长度
头。仍然可能是这个原因应用。在某些情况下拒绝设置内容长度肯定是一种有效的安全措施。至于无法检查服务器日志,我建议在服务器上运行phpinfo()
,然后设置一个测试服务器进行匹配。标题前绝对没有内容。正如我提到的,我可以毫无问题地设置不同的标题(内容类型
)。只有内容长度
标题才会导致错误。