Accept*HTTP标头中q = 0.5是什么?

kol*_*pto 186 http http-headers

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Run Code Online (Sandbox Code Playgroud)

这些'q =%f'是什么意思?

Tim*_*per 238

这被称为相对品质因数.它从0到1的范围内指定用户喜欢的语言,从HTTP/1.1规范,§14.4可以看出:

可以给每个语言范围赋予相关的质量值,该值表示用户对该范围指定的语言的偏好的估计.质量值默认为"q = 1".例如,

  Accept-Language: da, en-gb;q=0.8, en;q=0.7
Run Code Online (Sandbox Code Playgroud)

意思是:"我更喜欢丹麦语,但会接受英国英语和其他类型的英语."

  • 非常好,谢谢!但为什么不按优先顺序列出它们呢? (22认同)
  • 那么接受80%合格的en-gb是什么意思呢? (7认同)
  • @TimCooper为什么不按顺序或首选语言?除了比其他人更大之外,这个价值似乎并不重要. (4认同)
  • 到@kolypto,参数列表,无论是在URL还是在标题中都没有隐式顺序. (4认同)
  • @Pacerier:这意味着,如果您的网站是多语言的,用户更喜欢用英式英语而不是美式英语提供内容. (3认同)
  • @o_OTync:很难用这样的系统表明明确的反偏好. (2认同)
  • @Pacerier 理想情况下,除了范围是 0-1 之外。在这个范围内,我认为偏好“0”是“不想要”的更强指示,然后完全不存在该值。 (2认同)
  • @kolypto我认为原因是为了更灵活(您的客户端脚本可以只添加所需类型,而不是确保整个列表始终排序).但更令人着迷的原因是它让你的客户端允许服务器决定哪种类型更好!看:如果标准只是一个有序列表,你可以说,例如你更喜欢HTML而不是PDF.但是如果你对两者都完全没问题呢?我的网站发送了令人敬畏的PDF文件和优质的HTML.如果您无动于衷,我更愿意为您发送PDF,让您更快乐! (2认同)
  • 顺序表达性较差的原因@kolypto 是因为仅凭顺序不允许表明_equal_ 偏好。在排除了任何更多的优选选项之后,面对所支持的两个或更多个同等优选的选项,服务器然后可以应用_其_偏好来在它们之间进行选择。这就是为什么它被称为“协商”——“在我支持的类型中,你最喜欢哪一种?哦,这两种同样可以接受?好吧,好吧,我更喜欢发送这个。” 语言实际上是一种奇怪的情况,按照惯例,顺序_确实_表示qvalue之上的偏好(这在规范中被称为)。 (2认同)

Seb*_*olm 35

它在规范中称为相对品质因数:

每个媒体范围可以跟随一个或多个accept-params,从"q"参数开始,用于指示相对品质因数.第一个"q"参数(如果有的话)将media-range参数与accept-params分开.质量因素允许用户或用户代理使用从0到1的q值标度来指示该媒体范围的相对偏好度(第3.9节).默认值为q = 1.

...

这个例子

Accept: audio/*; q=0.2, audio/basic
Run Code Online (Sandbox Code Playgroud)

应该被解释为"我更喜欢音频/基本,但如果在质量降低80%之后它是最好的音频类型,请发送给我任何音频类型."

也可以看看:

  • @Mave:嗯,实际上它可能主要用作偏好的衡量标准.然而,在其最初的表述中,我确实认为它基于编码的质量.例如,考虑FLAC与MP3.您可以这样说:"如果最坏的情况是无损版本质量的50%,请将MP3版本发送给我.如果不是,请将FLAC版本发给我." 如何量化这样的质量,以及是否在实践中使用,我不知道,但我确实认为这是初衷. (10认同)
  • 我真的迟到了 - 但是“在质量下降 80% 之后”是什么意思?这是偏好程度,而不是音频文件的质量,对吗?还是我误读了这个? (2认同)

tes*_*t30 5

接受语言质量参数可以这样理解:

通过将Accept-Language: pl_PL;q=0.8, en_US;q=0.2,标头附加到请求,我们将以下消息传达给服务器

服务器,请向我提供此网站的波兰语翻译,但仅当其质量>= %80%与质量相关时,才可以这样做。如果质量是<80%-我不介意获得英文版本,因为它对我来说无关紧要,因为我还是会说英语。

因此,举例来说,作为网页内容提供商,我们可能会Accept-Language以这种方式引入标头解析,以使我们的网站适合根本不讲英语的外国人使用(那么即使翻译后的导航也会有所帮助(例如,仅翻译了导航的页面,具有q=0.1),其中具有q=0.9完全翻译的内容具有完全翻译的内容,并且可能由说原始语言和翻译语言内容的母语人士进行验证q=0.99-因为这是完全翻译内容含义的唯一可能的情况)