【问题标题】:Gzipped content expected预期的 Gzip 压缩内容
【发布时间】:2009-08-01 21:29:23
【问题描述】:

我在我的网站上启用了 gzip 压缩,并使用以下工具进行了测试:

尽管如此,Firefox 及其所有扩展程序(Firebug、Yslow 和 Google Page Speed)都表示它们接收的是非压缩内容。

text/html 由 php 的 ob_gzhandler 压缩,它也关心标题。

我不使用代理。

我做错了什么?

【问题讨论】:

    标签: php firefox compression gzip


    【解决方案1】:

    这并不是您所期望的真正答案,但是您是否尝试过不使用 PHP 压缩数据,而是使用 Apache?

    这可以使用mod_deflate来完成。

    几件事:

    • 这意味着 PHP 的计算量会减少
    • 这也意味着 (这是最好的部分 ;-) 您的 CSS/JS 文件可以压缩为 ;考虑到它们的大小,现在压缩它们可能不是一件坏事......


    作为旁注:为了帮助我们找出 PHP 压缩出了什么问题,您能否提供更多信息?比如你网站的 URL(如果它是公开的),还有一些代码?


    现在我们有了 URL 编辑http://ego.pestaa.hu/

    当我转到该页面时,响应的标题如下:

    HTTP/1.x 200 OK
    Date: Sat, 01 Aug 2009 21:53:37 GMT
    Server: Apache
    X-Powered-By: PHP/5.2.6
    **Content-Encoding: gzip**
    Vary: Accept-Encoding
    Keep-Alive: timeout=2, max=100
    Connection: Keep-Alive
    Transfer-Encoding: chunked
    Content-Type: text/html
    

    (使用带有 LiveHTTPHeaders 扩展的 firefox 3.5)

    您指出的三个测试站点也说您的页面是 gzip 压缩的。
    你找到问题所在了吗?

    您确定这不是来自您的浏览器的东西,不会在请求中发送以下标头:

    Accept-Encoding: gzip,deflate
    

    在其他答案后编辑

    来自 cmets 的引述:

    问题的根源可能不是 我的网站,但我的 isp/浏览器/路由器。 其中一个可以解压缩每个 组件到达内部之前 进程。

    哦,如果问题不是您的网站,我想我完全误解了这个问题 - 很抱歉 :-( 我以为您不知道如何从您的网站提供 gzip 压缩的内容。
    而且我认为我不是唯一一个,顺便说一句

    如果问题与您网站的配置无关,那么,有两种可能:

    • 可能是 Firefox 配置错误?如果你去about:confignetwork.http.accept-encoding 说什么?对我来说,它是gzip,deflate
    • 如果问题来自您的 ISP 或类似的东西,那么任何人都无能为力...

    【讨论】:

    • 我的主机不提供mod_deflate,我试过了。我使用 minify 来压缩 css/js。有问题的网站是ego.pestaa.hu
    • 哦,好的 :-( 太糟糕了你没有 mod_deflate :-( ;顺便说一句,我刚刚测试了你用 FF 3.5 提供的 URL,页面似乎被压缩得很好:使用LiveHTTPHeaders,我在响应的标头中有一个“Content-Encoding: gzip”
    • 好吧,您在 OP 中指出的所有三个站点都显示您的内容已压缩;所以,我猜你找到了解决问题的方法:-)
    • 不,问题的根源可能不是我的网站,而是我的 isp/浏览器/路由器。其中一个可能会在每个组件到达内部流程之前对其进行解压缩。
    • 很高兴看到您已正确压缩内容。尽管如此,在我的网络中还是缺少一些东西。
    【解决方案2】:

    除了其他插件外,还可以尝试Live Http Headers firefox 插件。它会打开一个窗口,显示确切的请求/响应标头,因为它们来回转发,因此您毫无疑问地知道接受编码和响应编码是什么。

    【讨论】:

    • 感谢您的建议。此扩展还表明没有任何内容被压缩。我想知道是什么原因造成的。
    • 不知道,但现在您知道问题出在服务器端了。请求包含 gzip 接受标头,是吗?
    【解决方案3】:

    您是否尝试过只在 Apache/您的网络服务器中启用 gzip 来代替/以及?

    【讨论】:

    • 在我的国家没有很好的托管服务,即使是启用了 mod_deflate 的共享主机也相当昂贵。我尝试启用但没有成功。
    【解决方案4】:
    • 您确定要使用 Firefox 扩展测试相同的 URL 吗?
      • 在 PHP 中使用 ob_gzhandler 会压缩 php 页面的输出,但 YSlow 和其他人也会警告您未压缩的 css/javascript 文件。
    • 检查浏览器是否发送了正确的标头。浏览器通常会发送“Accept-encoding: gzip”标头来告诉脚本/网络服务器它接受压缩内容。测试脚本肯定会发送,但您的浏览器可能不会。

    【讨论】: