HTTP:“gzip,deflate”的首选接受编码是啥?

Posted

技术标签:

【中文标题】HTTP:“gzip,deflate”的首选接受编码是啥?【英文标题】:HTTP: What is the preferred Accept-Encoding for "gzip,deflate"?HTTP:“gzip,deflate”的首选接受编码是什么? 【发布时间】:2010-07-11 23:58:53 【问题描述】:

这个问题是关于当all are equal weight时HTTP Header“Accept-Encoding”的媒体类型的优先顺序并且由this comment在我的博客上提示。

背景:

Accept-Encoding 标头采用逗号分隔的 媒体类型 列表,浏览器可以接受例如gzip,放气

品质因数也可以被指定以优先考虑其他媒体类型,例如在 "gzip;q=.8,deflate" 的情况下,首选 deflate - 但 与此问题无关。注意:带有“q=0”的类型表示“不可接受”。

RFC2616 还指出应该首先对媒体类型定义的“最具体的参考”进行加权。即“text/html;level=1”应该用在“text/html”之上——这也与问题无关。

问题:

在以下情况下,哪种媒体类型优先?

Accept-Encoding: gzip,deflate

这两种类型都有一个等效的品质因数 1,并且这两种类型都是浏览器“可接受的” - 因此可以使用任何一种。我一直认为输入的第一个类型应该是“首选”,但在RFC 中似乎没有针对这种特殊情况的具体示例或偏好。

【问题讨论】:

【参考方案1】:

我相信在 RFC 或相关 RFC 中的某处,它声明第一个是这种格式的所有字段的首选。

但是,在 gzip 与 deflate 的特殊情况下,如果可以的话,您可能应该使用 deflate,因为开销较低(页眉和页脚较少,虽然它仍然有 adler32 校验和,但它没有顶部的 crc32 )。除此之外,它们完全相同。两者的实际数据以相同的方式压缩。这意味着放气速度更快,输出更小。这两者在重负载下的页面上变得更加重要。 gzip 中的大多数额外标头都是诸如 unix 样式文件权限之类的东西,无论如何在这种情况下它们是无用的。

确实,出于可靠性考虑,客户端应该希望使用 gzip 服务,而出于性能考虑,服务器应该希望使用 deflate 服务。每秒发生数千次的额外开销比每次加载的每个页面都发生一次要重要得多。

在我自己的网站上,我首先检查 deflate,如果可以的话,我会使用它,然后检查 gzip。如果我不能使用,我只是发送纯文本。我不知道您使用的是什么语言,但它大约需要 5 行 ASP.NET 来做到这一点。

【讨论】:

我还认为 RFC 声明第一个条目是首选,但找不到具体的参考来澄清它。关于为什么你会选择一个而不是另一个的很好的信息。【参考方案2】:

这里没有客户端偏好。只需选择一个(服务器端)更喜欢的。

【讨论】:

以上是关于HTTP:“gzip,deflate”的首选接受编码是啥?的主要内容,如果未能解决你的问题,请参考以下文章

有没有啥地方可以找到关于有多少浏览器接受 gzip 的统计信息?

http请求

ServiceStack - 对 JSONP 请求使用 gzip/deflate 压缩

HTTP头部

apache_conf gzip / deflate apache2

HTTP头详解