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

phi*_*hag 16 history http http-headers

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

Accept-Language: da, en-gb;q=0.8, en;q=0.7
Run Code Online (Sandbox Code Playgroud)

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

Eli*_*nti 10

有趣的问题.

关于这个功能如何出现的讨论可能已经埋藏在邮件列表档案的某个地方,我无法找到有效的链接.你的例子不是唯一有问题的例子.如果它支持两种语言,那么"fr; q = 1.0,en; q = 1.0"的服务器是什么.服务法国因为它是第一个?那么"fr,en; q = 1.0"呢?

在我看来,语言首选项的有序列表比当前加权(可能是已排序)列表更适合该问题.有太多边缘情况,规范是关于实现的预期行为的.

至少(部分)规范的贡献者同意这个功能远非完美(HTTP/1.0和HTTP/1.1之间的关键差异 - 第八届国际万维网会议上发表的论文):

" 因为内容协商机制允许qvalues和通配符,并表达多个维度(语言,字符集,内容类型和内容编码)的变化,"最佳可用"变体的自动选择可能很复杂,可能会产生意想不到的结果.这些选择可以以微妙的方式与缓存相互作用;请参阅第3.4节中的讨论.

内容协商有望成为附加协议发展的沃土.例如,HTTP工作组认识到有关客户端实现功能的自动协商的实用程序,例如屏幕大小,分辨率和颜色深度.IETF创建了内容协商工作组,以推进该领域的工作."

简而言之,我没有真正的答案,但希望参与规范过程的管道.

  • 这当然闻起来像标准体过度设计解决方案.从理论上讲,创建一个与一个人自己的语言能力相匹配的抽象,作为一些高级内容协商的一部分听起来是可取的.实际上,很少有人会说> 3种语言,实施者几乎肯定会更喜欢排序列表,大多数网站都会公开语言选择UI:标准显然是过度构建的. (2认同)