在HTTP中,Accept-Language
请求标头如下所示:
Accept-Language: da, en-gb;q=0.8, en;q=0.7
为什么quality values(q=...
)包含在HTTP规范中?无法按质量对语言进行排序,为具有相同质量的语言选择任意顺序,并遗漏任何使用q=0
的语言?
答案 0 :(得分:9)
有趣的问题。
关于这个功能是如何形成的讨论可能埋藏在邮件列表档案的某处,我找不到有效的链接。你的例子不是唯一有问题的例子。如果它支持两种语言,那么“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节中的讨论。
内容协商有望成为其他协议发展的沃土。例如,HTTP工作组认识到有关客户端实现功能的自动协商的实用程序,例如屏幕大小,分辨率和颜色深度。 IETF创建了内容协商工作组,以推进该领域的工作。“
简而言之,我没有真正的答案,但希望规范流程的参与者能够进行管理。