与GZIP相比,缩小了压缩浏览器的兼容性和优势

时间:2009-10-15 18:21:52

标签: optimization compression gzip zlib deflate


2012年2月10日更新:

zOompf已就这个主题here完成了一些非常彻底的研究。它胜过下面的任何发现。


2010年9月11日更新:

已为此here

创建了测试平台




有关背景信息的GZIP和DEFLATE(zlib)的HTTP 1.1定义:

“'Gzip'是gzip格式,'deflate'是zlib格式。 可能应该调用第二个'zlib'来避免 与原始deflate压缩数据格式混淆。而HTTP 1.1 RFC 2616正确指向RFC 1950中的zlib规范 对于'deflate'传输编码,有报道称 不正确地生成或期望原始收缩的服务器和浏览器 RFC 1951中每个deflate规范的数据,最值得注意的 Microsoft产品 。所以即使'deflate'传输编码使用了 zlib格式将是更有效的方法(,实际上完全正确 使用'gzip'转移 zlib格式为 设计的内容 由于不幸的选择,编码可能更可靠 HTTP 1.1作者的名称。“(来源:http://www.gzip.org/zlib/zlib_faq.html

所以,我的问题是:如果我使用NO zlib包装器(或gzip)发送RAW deflate数据, 就此而言)是否有任何现代浏览器(例如,IE6及更高版本,FF, Chrome,Safari等)无法理解原始deflate 压缩数据(假设HTTP请求标头“Accept-Encoding”包含“deflate”)?

放气数据总是比GZIP小几个字节。

如果所有这些浏览器都可以成功解码数据,那么 缺点是发送RAW deflate而不是zlib?



2010年9月11日更新:

已为此here

创建了测试平台

4 个答案:

答案 0 :(得分:36)

更新:浏览器一直在放弃对原始收缩的支持。 zOompf已就这个主题 here完成了一些非常彻底的研究。不幸的是,原始deflate似乎不安全。


检查http://www.vervestudios.co/projects/compression-tests/results以获得更多结果。

<击> 以下是经过测试的浏览器:

/*  Browser                       DEFLATE      ZLIB     */
    XP Internet Explorer 6        PASS         FAIL
    XP Internet Explorer 7        PASS         FAIL
    XP Internet Explorer 8        PASS         FAIL
    Vista Internet Explorer 8     PASS         FAIL
    XP Firefox 3.6.*              PASS         PASS
    XP Firefox 3.5.3              PASS         PASS
    XP Firefox 3.0.14             PASS         PASS
    Win 7 Firefox 3.6.*           PASS         PASS
    Vista Firefox 3.6.*           PASS         PASS
    Vista Firefox 3.5.3           PASS         PASS
    XP Safari 3                   PASS         PASS
    XP Safari 4                   PASS         PASS     
    XP Chrome 3.0.195.27          PASS         PASS
    XP Opera 9                    PASS         PASS
    XP Opera 10                   PASS         PASS
    XP Sea Monkey 1.1.8           PASS         PASS
    Android 1.6 Browser (v4)*     N/A          N/A
    OS-X Safari 4                 PASS         PASS
    OS X Chrome 7.0.517.44        PASS         PASS
    OS X Opera 10.63              PASS         PASS
    iPhone 3.1 Safari             PASS         PASS

* Android发送HTTP请求标头“Accept-Encoding:gzip”。不允许放气。


我得出结论,我们可以始终发送原始 DEFLATE (当HTTP请求标头“Accept-Encoding”包含“deflate”时),浏览器将能够正确解释编码数据。有人可以证明这是错的吗?

注意:.NET的DEFLATE(System.IO.Compression.DeflateStream)的本机实现是原始DEFLATE。它也很糟糕。请使用zlib.net来满足您的所有.NET缩减需求。

答案 1 :(得分:6)

Android 1.6浏览器(v4)在页面上的zlib和deflate测试都失败了。我已将其添加到您的列表中。

答案 2 :(得分:1)

默认情况下,使用mod_deflate的AddOutputFilterByType DEFLATE是否通过gzip发送?

答案 3 :(得分:-1)

据我所知,是的 - 几乎你“总能发送原始DEFLATE,一切都会好的”......没有“总是”,但大多数情况下。如果没有,这是浏览器的问题。