【问题标题】:Why is gzip compression with Internet Explorer not working?为什么使用 Internet Explorer 进行 gzip 压缩不起作用?
【发布时间】:2009-08-06 22:13:27
【问题描述】:

我的网站经过 gzip 压缩,无法在 IE 中正确加载。它在 FF/Chrome 中运行良好,但在 IE 中,唯一弹出的是一个框,要求下载包含页面 html 文档的 .gz 文件。

这正常吗?我必须关闭 gzip 吗?

【问题讨论】:

  • Internet Explorer 的哪个版本?
  • IE 7. 尚未在 6 或 8 上测试

标签: php internet-explorer


【解决方案1】:

您是否发送了正确的标头?

你需要发送

Content-Encoding: gzip

让 IE 了解它是 gzip 压缩的标头(Firefox 等人足够聪明,可以自动检测到这一点 - 即使它们不应该!)

在 PHP 中,您可以这样做:-

header('Content-Encoding: gzip');

【讨论】:

  • header("Content-Encoding: gzip");
  • “自动检测”是不合法的。
【解决方案2】:

要补充一点 - 您应该为 IE6 pre-SP2 关闭 gzip 压缩。在 SP2 之前,IE6 并不总是能正确读取和缓存 gzip 后的内容,您最终会得到损坏的代码。

您可以通过在用户代理字符串中查找“SV1”来识别 IE6 SP2 安装。

【讨论】:

    【解决方案3】:

    我在带有 Flash 的页面上使用带有 Internet Explorer 的 gzip 时遇到了问题。如果您的页面有闪存,这可能就是原因。我不记得原因了,当时我们发现它在一个实时站点上造成了问题,所以我们只是禁用了 gzip 以让 Internet Explorer 绕过它。

    【讨论】:

    • 这是一个有效的注释,如果 IE6 看到“Vary”标头以及 Content-Encoding 作为 gzip,它将无法检索完整的响应。
    【解决方案4】:

    HTTP 标头是问题所在。如果您有 gzip 标头以及以下内容之一:

    • 变化
    • 传输编码:分块

    需要删除一个或两个。

    此问题更可能发生在运行 Apache HTTP Server 的计算机上,因为 Apache HTTP Server 可以对任何类型的文件使用分块编码。这包括静态文件,例如 JavaScript 文件或 .gif 文件。当出现本文中描述的问题时,存储在 Internet Explorer 缓存中的内容可能会被截断或损坏。

    对于 XML、XHTML 和 XSLT 文件,防止解析为 text/html 或 text/xsl:

        RewriteCond %{HTTP_ACCEPT} text\/html [OR]
        RewriteCond %{HTTP_ACCEPT} text\/xsl [OR]
        RewriteCond %{HTTP_ACCEPT} gif|jpeg|png$
        ReWriteRule .*\.(xsl|xslt)$ - [F]
    

    并添加application/xml作为内容类型映射:

        AddType application/xml .xsl
    

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-20
      • 2018-04-19
      • 2015-10-10
      相关资源
      最近更新 更多