我在 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-length
Transfer-Encoding
如果设置为,则无法设置chunked
。在发送标头时,服务器不知道最终将发送多少数据。每个块都有自己的长度标头字段(请参阅请求函数)。
仔细想想,与静态 HTML 文件不同,Web 服务器无法知道 PHP 脚本将生成多少数据。它可以缓存生成的文件并在脚本完成后发送,也可以在生成时分块发送。后者是首选,尤其是对于输出量大且运行时间长的脚本。
答案2
Nginx 不知道长度,因为 php 正在生成动态内容。您可以先写入 php 输出缓冲区,然后在刷新缓冲区之前手动设置标头字段。