http - 为什么在 HTTP Accept-Language header 中使用质量值?

标签 http http-headers history

在 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/

相关文章:

c++ - 用于后端 C++ 进程的 FastCGI 或 HTTP

git - 无法使用 http/https 将 Git 推送到远程存储库

javascript - 检查 http 响应代码以显示适当的失败消息

java - Java 栈和递归

image - Kubernetes kubectl 设置镜像部署无法--记录历史记录?

http - CORS Access-Control-Max-Age 被忽略

asp.net - Angular HttpClient 调用缺少查询字符串和授权 header

http - 如何强制浏览器不下载内容处置为 :attachment header 的文件

ruby-on-rails - 在 Rails 2 中覆盖资源路由

git - 为什么 git log 不显示移动文件的历史记录,我该怎么办?