如果加权 HTTP header 有重复值,权重不同,应该如何处理?
If a weighted HTTP header has duplicate values, with differing weights, how should this be handled?
请求 header 的值,例如 Accept-Language
、Accept-Encoding
等,具有隐式或显式加权值(例如 en; q=0.8
)。
万一完整字段值的解析值产生模棱两可的信息,特别是如果模棱两可被解释为不可接受(q=0
)或由于某些 non-zero 而可接受质量值,例如:
Accept-Encoding: gzip; q=0.8, gzip; q=0
这应该解释为:
- 不可接受;
- 可以接受;
- header无效;
或者其他一些选择,也许?
在 RFC 7231, the general section 5.3.1 质量值上
The weight is normalized to a real number in the range 0 through 1,
where 0.001 is the least preferred and 1 is the most preferred; a
value of 0 means "not acceptable". If no "q" parameter is present,
the default weight is 1.
和 Accept-Encoding
-特定的 section 5.3.4,第 3 和 4 小节
If the representation's content-coding is one of the
content-codings listed in the Accept-Encoding field, then it is
acceptable unless it is accompanied by a qvalue of 0. (As
defined in Section 5.3.1, a qvalue of 0 means "not acceptable".)
If multiple content-codings are acceptable, then the acceptable
content-coding with the highest non-zero qvalue is preferred.
明确表示 q=0
表示“不可接受”,最高 non-zero qvalue 是首选,但他们似乎没有讨论任何可能的歧义;可能是因为这是一个不太可能发生的事件。
If the representation's content-coding is one of the
content-codings listed in the Accept-Encoding field, then it is
acceptable unless it is accompanied by a qvalue of 0. (As
defined in Section 5.3.1, a qvalue of 0 means "not acceptable".)
If multiple content-codings are acceptable, then the acceptable
content-coding with the highest non-zero qvalue is preferred.
header Accept-Encoding: gzip; q=0.8, gzip; q=0
有一个单独的 content-coding gzip
用不同的 qvalues 重复。
- 首先,它伴随着qvalue
0.8
,即"acceptable"
- 其次,伴随着qvalue
0
也就是"not-acceptable".
当我阅读引用的规则时:
- 检查 content-coding 是否伴随 qvalue 为零;如果是这样,那就是 "not acceptable";
- 否则,取所有重复项的最大qvalue权重。
所以我的解释是下面两行是等价的:
Accept-Encoding: gzip, gzip;q=0.001, compress;q=0.1, compress;q=0, *;q=0.2, *;q=0.1
Accept-Encoding: gzip;q=1, compress;q=0, *;q=0.2
对于您的示例,以下两行是相同的:
Accept-Encoding: gzip; q=0.8, gzip; q=0
Accept-Encoding: gzip;q=0
请求 header 的值,例如 Accept-Language
、Accept-Encoding
等,具有隐式或显式加权值(例如 en; q=0.8
)。
万一完整字段值的解析值产生模棱两可的信息,特别是如果模棱两可被解释为不可接受(q=0
)或由于某些 non-zero 而可接受质量值,例如:
Accept-Encoding: gzip; q=0.8, gzip; q=0
这应该解释为:
- 不可接受;
- 可以接受;
- header无效;
或者其他一些选择,也许?
在 RFC 7231, the general section 5.3.1 质量值上
The weight is normalized to a real number in the range 0 through 1, where 0.001 is the least preferred and 1 is the most preferred; a value of 0 means "not acceptable". If no "q" parameter is present, the default weight is 1.
和 Accept-Encoding
-特定的 section 5.3.4,第 3 和 4 小节
If the representation's content-coding is one of the content-codings listed in the Accept-Encoding field, then it is acceptable unless it is accompanied by a qvalue of 0. (As defined in Section 5.3.1, a qvalue of 0 means "not acceptable".)
If multiple content-codings are acceptable, then the acceptable content-coding with the highest non-zero qvalue is preferred.
明确表示 q=0
表示“不可接受”,最高 non-zero qvalue 是首选,但他们似乎没有讨论任何可能的歧义;可能是因为这是一个不太可能发生的事件。
If the representation's content-coding is one of the content-codings listed in the Accept-Encoding field, then it is acceptable unless it is accompanied by a qvalue of 0. (As defined in Section 5.3.1, a qvalue of 0 means "not acceptable".)
If multiple content-codings are acceptable, then the acceptable content-coding with the highest non-zero qvalue is preferred.
header Accept-Encoding: gzip; q=0.8, gzip; q=0
有一个单独的 content-coding gzip
用不同的 qvalues 重复。
- 首先,它伴随着qvalue
0.8
,即"acceptable" - 其次,伴随着qvalue
0
也就是"not-acceptable".
当我阅读引用的规则时:
- 检查 content-coding 是否伴随 qvalue 为零;如果是这样,那就是 "not acceptable";
- 否则,取所有重复项的最大qvalue权重。
所以我的解释是下面两行是等价的:
Accept-Encoding: gzip, gzip;q=0.001, compress;q=0.1, compress;q=0, *;q=0.2, *;q=0.1
Accept-Encoding: gzip;q=1, compress;q=0, *;q=0.2
对于您的示例,以下两行是相同的:
Accept-Encoding: gzip; q=0.8, gzip; q=0
Accept-Encoding: gzip;q=0