HTTP 标头值何时以逗号或分号分隔?

问题描述 投票:0回答:1

Mdn Web 文档中多个 HTTP 标头值的分隔方式不一致。

例如,

Access-Control-Allow-Methods值语法以逗号分隔,如下所示:

Access-Control-Allow-Methods: <method>, <method>, …


但是,

Content-Security-Policy是用分号分隔的,如下所示:

Content-Security-Policy: <policy-directive>; <policy-directive>


为什么两者不一致?

我希望所有内容都按照另一个类似问题中的答案以逗号分隔。

在大多数情况下,除了 1 个特定例外,以下 2 个是等效的:
http
1个回答
0
投票
Header: foo Header: bar

并且:
Header: foo, bar

因此,当您看到不带引号的逗号时,您可以将它们视为 2 个不同的标头值。

;

通常用于指示后面有一组值的参数。例如,在此示例中有 2 个值,每个值都有一个

q

 参数:
Accept: text/html; q=0.5, text/plain; q=0.2

这又相当于:
Accept: text/html; q=0.5
Accept: text/plain; q=0.2

唯一的例外是
Set-Cookie
,它错误地使用了

,

。这是一个
错误
,但它是 HTTP 规范的一部分。
请注意,除了逗号之外,HTTP 标头的编码方式并没有太多通用性,因此您需要查找特定标头才能了解如何对其进行解码。

新的 HTTP 标头可能会遵循特定的格式:结构化字段:

https://www.rfc-editor.org/rfc/rfc8941.html

但是对于任何较旧的标题来说,它对所有人来说都是免费的,并且有一些一般规则和指南。逗号作为值分隔符是可靠的,但除了这个例外。

© www.soinside.com 2019 - 2024. All rights reserved.