在 HTTP 中,Accept-Language
请求 header 如下所示:
Accept-Language: da, en-gb;q=0.8, en;q=0.7
为什么 quality values (q=...
) 包含在 HTTP 规范中?难道不能按质量对语言进行排序,为具有相同质量的语言选择任意顺序,并忽略任何 q=0
的语言吗?
最佳答案
有趣的问题。
关于此功能如何产生的讨论可能隐藏在邮件列表文件的某个地方,我找不到有效的链接。您的示例不是唯一有问题的示例。如果它支持两种语言,那么带有“fr; q=1.0, en; q=1.0”的服务器是什么。为法国人服务,因为它是第一位的? “fr, en; q=1.0”呢?
在我看来,一个有序的语言偏好列表比当前的加权(可能排序)列表更适合解决这个问题。有太多边缘情况,其中规范对实现的预期行为含糊其辞。
至少(一些)规范的贡献者同意此功能远非完美(Key Differences between HTTP/1.0 and HTTP/1.1 - Paper Presented at The Eighth International World Wide Web Conference):
“因为内容协商机制允许 qvalues 和通配符,并表示跨多个维度(语言、字符集、内容类型和内容编码)的变化,自动选择“最佳可用” ' 变体可能很复杂,并可能产生意想不到的结果。这些选择可以以微妙的方式与缓存交互;请参阅第 3.4 节中的讨论。
内容协商有望成为附加协议(protocol)演进的沃土。例如,HTTP 工作组认识到有关客户端实现功能(如屏幕大小、分辨率和颜色深度)的自动协商的实用性。 IETF 已创建内容协商工作组来推进该领域的工作。"
简而言之,我没有真正的答案,但希望规范过程的参与者能进来。
关于http - 为什么在 HTTP Accept-Language header 中使用质量值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6548214/