HTTP: "gzip,deflate" 的首选 Accept-Encoding 是什么?

14

这个问题涉及到HTTP头部"Accept-Encoding"的媒体类型的优先级顺序,当它们权重相等时,并且这个问题是由我博客上这条评论引起的。

背景:

Accept-Encoding头部接受一个由逗号分隔的媒体类型列表,浏览器可以接受例如gzip,deflate等。

可以指定一个质量因子来优先考虑其他媒体类型,例如在“gzip;q=.8,deflate”的情况下,deflate更受欢迎-但对于这个问题不相关。注:带有“q = 0”的类型表示“不可接受”。

RFC2616还规定,媒体类型定义的“最具体引用”应该首先加权。即,“text / html; level = 1”应该优先使用而不是“text / html”-这也与此问题无关。

问题:

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

Accept-Encoding: gzip,deflate

两种类型都具有等效的质量因子1,并且两种类型对于浏览器来说都是“可接受的”,所以可以使用任何一种。我一直认为应该首先输入第一种类型作为“首选项”,但在RFC中,对于这种特定情况似乎没有具体的示例或偏好。

2个回答

8

我相信在RFC中或相关的RFC中,它指出对于这种格式的所有字段,首选第一项。

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

真正的客户端应该希望由于可靠性而提供gzip,服务器应该希望由于性能而提供deflate。当它每秒发生数千次时,额外的开销比每次加载页面时发生一次更为重要。

在我的网站上,我首先检查是否支持deflate,如果可以,则使用它,然后再检查gzip。如果两者都不行,我就发送纯文本。我不知道你使用的是什么语言,但这只需要大约5行ASP.NET代码。


我也认为RFC规定第一个条目是首选,但找不到具体的参考来澄清。不过关于为什么选择其中之一的信息很棒。 - Dave Transom

2

这里没有客户端偏好。只需选择您(服务器端)喜欢的即可。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接