内容长度标题不存在

我在Linux上安装了nginx服务器。 当我用curl发送请求时, Content-Length头部在响应中缺失。

1.php文件是:

 <?php echo "hello"; ?> 

示例请求是:

 curl api.mysite.com/taxi/1.php -i HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Wed, 17 Sep 2014 06:16:00 GMT Content-Type: text/html; charset=utf8 Vary: Accept-Encoding X-Powered-By: PHP/5.4.4-14+deb7u14 Age: 0 X-Cache: MISS from cache.turonnet.uz Transfer-Encoding: chunked Connection: keep-alive 

我该如何解决这个问题?

如果Transfer-Encoding设置为chunked则不能设置content-length 。 在发送头文件时,服务器不知道最终将发送多less数据。 每个块都有自己的长度头字段(请参阅RFC )。

如果你仔细想想,与静态HTML文件不同,Web服务器无法知道PHP脚本将生成多less数据。 它可以caching生成的文件并在脚本完成之后发送,或者在生成时以块的forms发送。 后者特别适用于输出量大,运行时间长的脚本。

Nginx不知道长度,因为PHP正在生成dynamic内容。 您可以先写入到php输出缓冲区,然后在刷新缓冲区之前手动设置标题字段。