我阅读了一些关于设置将要提供的文件的内容长度的文章。与分块下载相比,它有一些好处。当内容长度未知时,服务器提供块(无论如何都不知道块的大小)。
在 PHP 中,我使用 ob_gzhandler 压缩 html、js 和 css 文件以及其他基于文本的内容。在 gzip 输出之前设置原始内容长度会导致奇怪的副作用,因为长度与 gzip 输出的长度不匹配。我注意到延迟或浏览器报告编码错误。
我看到了一个技巧(也在stackoverflow上)在gzip压缩后设置内容长度以确保它报告正确的大小。但是当我这样做时,内容不再被压缩。
问题是,这种行为正确吗?gzip 压缩的内容是否总是分块发送?内容长度是否仅适用于未压缩的文件?
这里有一些代码片段:
1 导致压缩和分块文件传输:
ob_start('ob_gzhandler');
echo $sResult;
2 指定内容长度的正常文件传输结果(但需要 gzipped 和内容长度):
ob_start('ob_gzhandler');
echo $sResult;
header('Content-Length: '.ob_get_length());
这里有一些http头结果的图片: 1
2