为什么在HTTP Accept-Language标头中使用质量值?

时间:2011-07-01 12:54:10

标签: http http-headers history

在HTTP中,Accept-Language请求标头如下所示:

Accept-Language: da, en-gb;q=0.8, en;q=0.7

为什么quality valuesq=...)包含在HTTP规范中?无法按质量对语言进行排序,为具有相同质量的语言选择任意顺序,并遗漏任何使用q=0的语言?

1 个答案:

答案 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创建了内容协商工作组,以推进该领域的工作。

简而言之,我没有真正的答案,但希望规范流程的参与者能够进行管理。