【发布时间】:2011-09-14 13:41:57
【问题描述】:
我对 HTTP 标头:Content-Encoding 有一些严重(或者更好地说:奇怪)问题。
我想在将内容发送到客户端浏览器之前对其进行 gzip 压缩。为此,我正在检查客户端浏览器是否接受 gzip,如果是,我正在使用 ob_start("ob_gzhandler") 并设置内容编码:$response->addHeader("Content-Encoding", "gzip");
我认为我的问题是手动设置 Content-Encoding 标头。 如果我使用
$response->addHeader("Content-Encoding", "gzip");,则内容仅显示在 Opera 中。如果我使用
$response->addHeader("Content-Encoding", "'gzip'");,则内容在所有浏览器中都显示正确,但 gzip 压缩检查表明它未压缩并且 W3C HTML 验证服务无法对页面进行编码:
错误是:不知道如何解码 Content-Encoding ''gzip''
- 如果我不使用线和在线使用
ob_start("ob_gzhandler")页面只能在opera中显示
我在浏览器中正确输出的完整代码行如下:
$accEncoding = $request->getHeader("http_accept_encoding");
if($accEncoding !== NULL && substr_count($accEncoding, 'gzip')) {
ob_start("ob_gzhandler");
$response->addHeader("Content-Encoding", "'gzip'");
$response->addHeader("Vary", "Accept-Encoding");
} else {
ob_start();
}
我是在使用 ob_gzhandler 错误还是在这里犯了其他错误?我对正确处理 gzip 输出感到非常困惑。
【问题讨论】:
-
web-sniffer.net 非常适合查看实际发送的标头。
标签: php http-headers