【发布时间】:2013-01-22 17:28:46
【问题描述】:
我正在加载一个由 PHP 动态生成的特别大的 JSON 字符串。为了向用户提供一些反馈,我想显示下载进度。
我已经搞定了代码,它适用于静态内容,如图像、JS 文件等。但是,它似乎不适用于动态文件。
这是有道理的,因为动态文件没有可预测的内容长度,但即使我在 PHP 中添加它:
ob_start(function($c) {
header("Content-Length: ".strlen($c));
return $c;
});
它仍然不发送标头(但如果我添加任何其他标头,它工作正常)。
有没有办法强制 Apache 发送 Content-Length 标头?目前我唯一的选择是将输出保存到一个临时文件并重定向到它。这会起作用,但它有点乱,所以如果可能的话我宁愿避免它。
【问题讨论】:
-
...具体来说就是Answer中的传输编码说明。
-
感谢您的指点。它看起来不像使用分块编码(至少,
Transfer-Encoding没有出现在响应标头中)而且我似乎无法让它强制 HTTP/1.0... -
你试过简单的
ob_start(); /* output json */ $content = ob_get_clean(); header('Content-Length: '.strlen($content)); print($content);吗?虽然您的ob_start回调没有被执行是出乎意料的,但您当然可以期待 PHP 会发生任何意外。 -
你能发布
curl -I <url>的输出吗?
标签: apache http-content-length