Content-Length 标头不存在

Content-Length 标头不存在

我在 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

我该如何修复它?

答案1

content-lengthTransfer-Encoding如果设置为,则无法设置chunked。在发送标头时,服务器不知道最终将发送多少数据。每个块都有自己的长度标头字段(请参阅请求函数)。

仔细想想,与静态 HTML 文件不同,Web 服务器无法知道 PHP 脚本将生成多少数据。它可以缓存生成的文件并在脚本完成后发送,也可以在生成时分块发送。后者是首选,尤其是对于输出量大且运行时间长的脚本。

答案2

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

相关内容