通过GZIP压缩浏览器的兼容性和优势


更新2012年2月10日:

zOompf在这里已经完成了一些非常深入的研究。 它胜过以下任何发现。


更新2010年9月11日:

这里为此创build了一个testing平台


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

''Gzip'是gzip格式, 'deflate'是zlib格式,为了避免与原始压缩数据格式混淆,可能应该调用第二个'zlib',而HTTP 1.1 RFC 2616正确指向在RFC 1950的zlib规范中,对于'deflate'传输编码, 已经有服务器和浏览器错误地产生或期望每个RFC 1951中的deflate规格的原始deflate数据, 特别是微软产品 ,所以即使'deflate'使用zlib格式传输编码将是更有效的方法( 实际上zlib格式的devise什么 ),使用'gzip'传输编码可能是更可靠的,因为HTTP部分名称的不幸select1.1作者“。 (来源: http : //www.gzip.org/zlib/zlib_faq.html )

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

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

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

更新2010年9月11日:

这里为此创build了一个testing平台

更新:浏览器已经放弃对原始缩减的支持。 zOompf在这里已经完成了一些非常深入的研究 不幸的是,似乎原始的放气是不安全的使用。


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

以下是已经过testing的浏览器:

/* 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/AN/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”时),并且浏览器将能够正确地解释编码数据。 有人可以certificate这个错误?

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

Android 1.6浏览器(v4)会在您的页面上执行zlib和deflatetesting。 我已经将它添加到您的列表中。

是不是默认使用gzip通过mod_deflate发送AddOutputFilterByType DEFLATE

据我所知,是的 – 几乎所有你“总是可以发送原始DEFLATE,一切都会好起来的… …”并不总是“,但最重要的是所有情况。 如果没有,这是浏览器的问题。