zOompf已就这个主题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?
答案 0 :(得分:36)
检查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,一切都会好的”......没有“总是”,但大多数情况下。如果没有,这是浏览器的问题。