在http GET请求中,如果我已正确理解事物,则Accept-Language的q值会列出响应中的语言优先级。
Accept-Language:da,en-gb; q = 0.8,en; q = 0.7
丹麦人更喜欢。如果失败,请求英国英语,并且 最后是任何类型的英语。
如果仅仅是优先事项,为什么实际值很重要?
在这个例子中,如果它改为:
,会有什么不同Accept-Language:da,en-gb:q = 0.5,en:q = 0.4
答案 0 :(得分:1)
Accept-headers用于server-driven content negotiation。 HTTP规范没有指定如何处理质量值,只是代理更优先考虑更高的值。剩下的其他一切都是为了决定服务器。
进一步探讨和解释了这个想法here。这假设资源的原始质量为1,并且对其执行的每个操作(例如转换或转换为不同的格式)使其降级。考虑的其他因素是时间(服务器需要进行操作以产生更好的资源)和大小(效率较低的格式)。
时间和大小通常与语言无关。相反,可以使用可用翻译的质量(即完整性)。例如,如果丹麦语翻译仅完成了60%,那么英语翻译将优先用于标题Accept-Language: da, en-gb;q=0.8, en;q=0.7
,而不是Accept-Language: da, en-gb:q=0.5, en:q=0.4
。
事实上,现在质量价值似乎没有任何意义。我使用自定义标题Accept-Language: fr;q=0.5, en
在Firefox中测试了许多热门网站(包括谷歌和Facebook),这意味着我更喜欢英语而不是法语。我测试的所有网站都返回了法语页面。我还换了'fr'和'en',只得到了英文页面。这意味着现代网站似乎完全忽略了质量价值,只使用标题中的语言顺序。选项不按优先顺序排列是不寻常的,但它不违反规范。
(我在每次测试前都清除了所有的cookie,我不住在法语国家,也不在计算机的任何地方使用法语,因此对结果没有影响。)