91

2012 年 2 月 10 日更新:

zOompf 在这里完成了关于这个主题的一些非常彻底的研究。它胜过以下任何发现。


2010 年 9 月 11 日更新:

在这里为此创建了一个测试平台




GZIP 和 DEFLATE (zlib) 的 HTTP 1.1 定义以获取一些背景信息:

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

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

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

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



2010 年 9 月 11 日更新:

在这里为此创建了一个测试平台

4

4 回答 4

37

更新:浏览器已经放弃了对原始放气的支持。zOompf 在这里完成了关于这个主题的一些非常彻底的研究不幸的是,原始放气似乎不安全使用。


查看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 放气需求。

于 2011-03-03T20:29:26.280 回答
6

Android 1.6 浏览器 (v4) 未能通过您页面上的 zlib 和 deflate 测试。我已将其添加到您的列表中。

于 2009-10-22T07:06:45.837 回答
1

是不是AddOutputFilterByType DEFLATE默认使用 gzip 发送的 mod_deflate ?

于 2010-08-26T17:48:51.120 回答
-1

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

于 2009-10-17T02:24:12.610 回答