【问题标题】:Deflate compression browser compatibility and advantages over GZIPDeflate 压缩浏览器的兼容性和优于 GZIP 的优势
【发布时间】:2010-12-07 03:31:05
【问题描述】:

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 规范的数据,最值得注意的是 微软产品。因此,即使使用“放气”传输编码 zlib 格式将是更有效的方法(事实上正是 zlib 格式的设计目的),使用“gzip”传输 由于不幸的选择,编码可能更可靠 HTTP 1.1 作者的名字。”(来源:http://www.gzip.org/zlib/zlib_faq.html

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

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

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



2010 年 9 月 11 日更新:

已经为此here创建了一个测试平台

【问题讨论】:

  • 您介意解释一下为什么 System.IO.Compression.DeflateStream 比 zlib.net 更烂吗?除了一个人提到它“没有特别好的压缩比”之外,谷歌并没有向我展示太多相关的东西。
  • 是的,.net 的 gzip 和 deflate 方法的压缩率似乎都没有达到应有的水平。但是,我没有在两者之间进行任何速度基准测试(zlib.net vs. native .net)。
  • 为什么不直接记录测试用例的结果?
  • 我一直在 System.IO.Compression 库中四处寻找,它似乎使用静态/预定义树 - 因此压缩没有针对特定流进行优化。应该是最快的方法,但肯定会产生较差的压缩比。
  • @JoelMueller 这可以解释:virtualdub.org/blog/pivot/entry.php?id=335

标签: optimization compression gzip zlib deflate


【解决方案1】:

更新:浏览器已放弃对原始 deflate 的支持。 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”。不允许放气。


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

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

【讨论】:

  • 您能否更具体地了解使用 zlib.net 进行放气?这与上面的图表有什么关系,上面的图表说 raw deflate 有效,但 zlib 在某些 XP IE 案例中不起作用?
  • Android 从 API 9 开始支持 deflate 压缩。有关详细信息,请参阅:developer.android.com/reference/java/util/zip/…
  • @DavidMurdoch 你的测试中唯一理智的结果似乎是从不使用deflatevervestudios.co/projects/compression-tests/results我认为应该编辑这个答案以反映这一点
【解决方案2】:

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

【讨论】:

  • 谢谢! Android的浏览器发送什么Content-Encoding?
  • 它发送'Accept-Encoding: gzip'。
【解决方案3】:

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

【讨论】:

  • 嘿,保罗,我觉得我在和名人说话……你无处不在。 :-) 无论如何,AddOutputFilertByType DEFLATE 默认情况下会压缩响应而不是缩小响应(据我所知)。 Gzipdeflate + 10 字节标题 + 8 字节页脚 - 这意味着 Gzip 将始终大于 deflate...那么我们为什么要使用 gzip? (请参阅en.wikipedia.org/wiki/Gzip#File_format 了解 gzip 的组成部分)。话虽如此,我不确定如何将 deflate 设置为 Apache 中的首选压缩方法。
【解决方案4】:

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

【讨论】:

  • 我试图找出原始放气失败的情况。根据规范,它应该在所有浏览器中都失败。
  • Raw deflate(即不是 zlib,根本没有头文件)将仅在 IE7 中工作,如果 encoding:gzip 和(仅在chrome v24) encoding:deflate in chrome.
猜你喜欢
  • 2011-11-06
  • 2011-06-11
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-24
相关资源
最近更新 更多