为什么真实世界的服务器更喜欢gzip而不是deflate编码?

时间:2009-05-19 16:38:52

标签: http encoding compression gzip deflate

在编码,解码和压缩大小方面,我们已经了解了deflate encoding is a winner over gzip。

那么为什么没有大型网站(我能找到)发送它(当我使用接受它的浏览器时)?

Yahoo claims deflate“效果不佳”。为什么呢?

我维护更喜欢放气的HTTP服务器软件,所以我想知道是否有一些非常好的理由不继续这样做。

6 个答案:

答案 0 :(得分:71)

关于规范和HTTP之间的命名存在一些混淆:

    RFC 1951定义的
  • DEFLATE 压缩数据格式
  • RFC 1950定义的
  • ZLIB 压缩数据格式,它使用 DEFLATE 数据格式。
  • RFC 1952定义的
  • GZIP 文件格式,它使用 DEFLATE 压缩数据格式。

但是HTTP uses a different naming

  
      
  • gzip 由RFC 1952 [25]中描述的文件压缩程序“gzip”(GNU zip)生成的编码格式。此格式是Lempel-Ziv编码(LZ77),具有32位CRC。

  •   
  • deflate RFC 1950 [31]中定义的“zlib”格式与RFC 1951 [29]中描述的“deflate”压缩机制相结合。

  •   

总结一下:

  • gzip GZIP 文件格式。
  • deflate实际上是 ZLIB 数据格式。 (但是有些客户也接受deflate的实际 DEFLATE 数据格式。)

另见this answer on the question What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings?

  

“gzip”和“deflate”HTTP 1.1编码有什么区别?

     

“gzip”是gzip格式,“deflate”是zlib格式。他们应该调用第二个“zlib”来避免与原始deflate压缩数据格式混淆。虽然HTTP 1.1 RFC 2616正确地指向RFC 1950中针对“deflate”传输编码的zlib规范,但是有报告称服务器和浏览器根据RFC 1951中的deflate规范错误地生成或期望原始deflate数据,最明显的是Microsoft 。因此,即使使用zlib格式的“deflate”传输编码将是更有效的方法(事实上正是zlib格式的设计),使用“gzip”传输编码可能更可靠,因为不幸的选择HTTP 1.1作者的名称。

答案 1 :(得分:9)

从我的最小测试开始,大多数HTTPds出现:

  1. 不支持即时通知:Apache的mod_deflate(一个惊喜),GWS
  2. 或者更喜欢发送gzip:IIS,lighttpd的mod_compress
  3. 因此,要在最受欢迎的服务器(Apache)上发送deflate,您必须维护预编码文件并使用mod_negotiate(您甚至可能必须使用类型映射来更喜欢放气)。

    我猜,由于这个麻烦,deflate很少被使用,因此客户端deflate支持中存在的错误更可能存在于gzip支持中。

答案 2 :(得分:7)

查看此网站以获取更多信息: http://web.archive.org/web/20120321182910/http://www.vervestudios.co/projects/compression-tests


根据规范,deflate实际上是zlib(专门为通过网络传输内容而开发的压缩格式)...这是deflate的包装。

但是,Internet Explorer错误地将HTTP 1.1 deflate(zlib)实现为原始deflate。因此,如果您的服务器向IE发送正确的HTTP 1.1 deflate(zlib)内容,它就会窒息。

我已经对这个主题进行了一些研究,并且总是将 raw deflate发送到现代浏览器看起来很安全...只是确保它实际上是 raw 而不是zlib。

查看此文章以获取更多信息> Gzip vs Deflate (zlib) revisited

所以我认为有充分的理由继续通过gzip发送deflate。

答案 3 :(得分:6)

据我所知(免责声明:我不是这里的专家,正如我所听到的那样),gzip使用与deflate相同的算法,但它有更多的标题内容使它具有更大的尺寸(相对于deflate)。但是,我认为较少的客户端和代理支持deflate

答案 4 :(得分:1)

我想知道同样的事情:)。我认为这可能与旧的(可能是古老的)浏览器的兼容性有关。我在某个地方看到旧版浏览器更容易出现在某些情况下mod_gzipped的缩小内容(?),但谷歌搜索这导致我得出结论,最好停止谷歌搜索。

答案 5 :(得分:0)

ActionScript 3具有本机deflate支持,但对于gzip,您需要使用外部库