DEFLATE 在 IE9 中不起作用

DEFLATE 在 IE9 中不起作用

我把这个发布在 stack overflow 上,但有人建议我在这里可能会更幸运:

我以前没有使用过 deflate 来编码网页,所以这对我来说是新领域,但当我在 ff 中查看网络流量时,我的 all.js 文件从 427kb 变为 117kb,所以我似乎在这里可以正常工作。但在 IE9 中没有变化。我的响应标头在 FF 中显示 Content-Encoding: gzip,但在 IE9 中没有

这是我的.htaccess:

<ifModule mod_deflate.c>
  AddOutputFilterByType DEFLATE text/html text/plain text/xml application/xml application/xhtml+xml text/css text/javascript application/javascript application/x-javascript
</ifModule>

IE9 中 all.js 的请求标头:

   Key  Value
Request GET /all.js HTTP/1.1
Accept  application/javascript, */*;q=0.8
Referer http://www.alexchapman.co.uk/
Accept-Language en-GB
User-Agent  Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Accept-Encoding gzip, deflate
Host    static.alexchapman.co.uk
Connection  Keep-Alive
Cache-Control   no-cache

IE9 中 all.js 的响应标头:

Key Value
Response    HTTP/1.1 200 OK
Date    Tue, 28 Feb 2012 15:53:41 GMT
Server  Apache/2
Last-Modified   Tue, 28 Feb 2012 15:53:40 GMT
Accept-Ranges   bytes
Cache-Control   private
Expires Fri, 02 Mar 2012 03:53:41 GMT
Keep-Alive  timeout=15, max=100
Connection  Keep-Alive
Transfer-Encoding   chunked
Content-Type    text/javascript

Firefox 中 all.js 的请求标头:

Accept: */*
Accept-Encoding: gzip, deflate
Accept-Language: en-gb,en;q=0.5
Cache-Control: no-cache
Connection: keep-alive
Cookie: DELETED - this should not be sent and isnt sent with IE
Host: static.alexchapman.co.uk
Pragma: no-cache
Referer: http://www.alexchapman.co.uk/
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.2) Gecko/20100101 Firefox/10.0.2

Firefox 中 all.js 的响应标头:

Accept-Ranges: bytes
Cache-Control: private
Connection: Keep-Alive
Content-Encoding: gzip
Content-Type: text/javascript
Date: Tue, 28 Feb 2012 15:55:26 GMT
Expires: Fri, 02 Mar 2012 03:55:26 GMT
Keep-Alive: timeout=15, max=100
Last-Modified: Tue, 28 Feb 2012 15:55:26 GMT
Server: Apache/2
Transfer-Encoding: chunked
Vary: Accept-Encoding

需要说明的是,这不仅仅发生在 all.js 上 - 我使用它作为示例,因为它是压缩后最大的文件。任何有关我做错什么的建议都将不胜感激。

**********更新************

我的托管服务提供商回复了我并说他们可以确认 gzip 和 deflate 都已启用并在我的网站上运行,他们说 Internet Explorer 的问题特定于该浏览器,因此我建议尝试兼容模式,因为这不是由我们的服务器引起的。

我知道 IE 中有一个兼容性视图,它应该有助于正确呈现旧网站,所以我不知道他们在这里做什么,但我可以确认这对文件压缩没有影响。

答案1

我想我已经搞清楚这里发生了什么。我下载了Wireshark并通过它检查了网络流量。我为此苦苦挣扎了一阵子,但我想我现在已经明白了——如果有人能确认我做得正确,那就太好了。

以文件 all.js 为例,我在 Firefox 和 IE9 中跟踪了请求的 tcp 流。两者都表示它们使用了 gzip 加密。有趣的是,对话的总大小不同。IE9 – 268471 字节 FF-120812 字节(均小于未压缩的文件)。

这大约是 firebug 中报告的正确文件大小。但只有 IE 开发者工具中报告的文件大小的一半。因此,IE 似乎不仅在 gzip 方面表现较差,而且其开发者工具错误地报告了比实际情况更差的情况。如果有人可以验证这个结果或提出解释,我会接受他们的答案。

答案2

虽然不是“答案”,但是mod_gzip对我来说效果很好(IE9 也一样)。我的配置:

<IfModule gzip_module>
    mod_gzip_on Yes

    mod_gzip_item_include mime text/.*
    mod_gzip_item_include mime application/xm.*
    mod_gzip_item_include mime application/javascript
    mod_gzip_item_include mime image/svg.*

    mod_gzip_dechunk Yes
</IfModule>

Deflate 和 GZip 几乎是同一个东西,gzip 从技术上来说比较慢,但在现代计算机上,可以在客户端安全地忽略差异,如果您正在缓存响应,则可以在服务器端忽略差异(动态生成的页面是不可能的)。

答案3

Content-Encoding: gzip即使请求是 gzip 压缩的,IE9 也不会显示标头,因此在检查是否启用 gzip 压缩时不要相信 MSIE。

另外,要小心 MSIE + TLS + gzip + chunked 传输编码组合,存在一些错误,例如:https://support.microsoft.com/kb/871205

相关内容