我想知道接受语言中实际语言的顺序是否重要。例如,如果我们的 HTTP GET 消息包含标头:
Accept-Language: en-us, en-gb;q=0.2, en;q=0.3, fr, fr-ch, da, fi
...浏览器是否会更喜欢繁体法语(fr)而不是瑞士法语(fr-ch),即使它们都没有提到相对质量因子 q,因此为 1。
我想知道接受语言中实际语言的顺序是否重要。例如,如果我们的 HTTP GET 消息包含标头:
Accept-Language: en-us, en-gb;q=0.2, en;q=0.3, fr, fr-ch, da, fi
...浏览器是否会更喜欢繁体法语(fr)而不是瑞士法语(fr-ch),即使它们都没有提到相对质量因子 q,因此为 1。
No, the ordering does not matter.
当我实现这个时,我使用了一个稳定的排序,这样具有相同相对 q 值的值将保持相同的相对顺序。我相信这是合乎逻辑的,并且可能反映了规范的意图:
请注意,某些接收者将列出语言标签的顺序视为优先级降序的指示,特别是对于分配了相同质量值的标签(没有值与 q=1 相同)。但是,不能依赖这种行为。为了一致性和最大化互操作性,许多用户代理为每个语言标签分配一个唯一的质量值,同时还按质量降序排列它们。更多关于语言优先级列表的讨论可以在RFC4647 的第 2.3 节中找到。
作为可能需要此行为的示例,如果您有一个缓存层/中间件并且您正在Accept*
以不稳定的方式处理标头(例如,如果它们都具有相同的 q 值,则可能是随机选择),而您可能不是从技术上讲,做错了什么,但结果将是不可预测的,并且可能会导致缓存层出现问题和糟糕的用户体验(例如,无明显原因的页面之间的语言更改)。