Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 内容长度标头和内部服务器错误_Php_Apache_Http - Fatal编程技术网

Php 内容长度标头和内部服务器错误

Php 内容长度标头和内部服务器错误,php,apache,http,Php,Apache,Http,我有一个PHP驱动的网站,它使用输出缓冲,生成整个页面,并在发送实际页面内容之前吐出几个标题(Content-Type和Content-Length) 这在我的本地Apache服务器上运行良好,但当我将其上传到我的web主机(也是Apache)时,它就失败了,出现了500个内部服务器错误,我最终跟踪到了Content Length头。我只是删除了标题(这不是很重要),它的工作很好,因为 现在我只是想知道为什么会发生这种情况——是否有某种服务器设置禁止脚本添加此特定头?我可能错了,但我认为这是不允

我有一个PHP驱动的网站,它使用输出缓冲,生成整个页面,并在发送实际页面内容之前吐出几个标题(
Content-Type
Content-Length

这在我的本地Apache服务器上运行良好,但当我将其上传到我的web主机(也是Apache)时,它就失败了,出现了500个内部服务器错误,我最终跟踪到了
Content Length
头。我只是删除了标题(这不是很重要),它的工作很好,因为


现在我只是想知道为什么会发生这种情况——是否有某种服务器设置禁止脚本添加此特定头?

我可能错了,但我认为这是不允许的,无论是可选的PHP安全设置还是许多服务器使用的Suhosin PHP保护系统


我想我记得读过一些关于
内容长度
和实际内容长度之间的不匹配如何被用于漏洞利用的文章,因此,PHP+Suhosin和浏览器的
xmlHttpRequest
Javascript对象都坚持要为您设置标题,如果在已发送正文的某些部分之后设置响应标头,则会出现错误。在生产环境中,内容的大小可能大于输出缓冲区,因此服务器开始向客户机发送数据。这可能会导致您描述的错误

试着回答这些问题,你应该得到解决方案-

  • 使用http代理并检查错误响应。您是否得到一些html内容以及500错误代码
  • 输出缓冲区的大小是多少,响应的大小是否大于缓冲区的大小
  • 与本地机器相比,生产中的缓冲区大小是否相同

  • 最好的办法是在服务器
    错误中查看详细消息。log
    @Pekka:很遗憾,我没有访问权限。我们部署w/a reverse proxy+1可能是出于某种原因,但我怀疑这就是我的原因:我在服务器的响应中找不到任何
    内容长度
    头。仍然可能是这个原因应用。在某些情况下拒绝设置内容长度肯定是一种有效的安全措施。至于无法检查服务器日志,我建议在服务器上运行
    phpinfo()
    ,然后设置一个测试服务器进行匹配。标题前绝对没有内容。正如我提到的,我可以毫无问题地设置不同的标题(
    内容类型
    )。只有
    内容长度
    标题才会导致错误。