据我所知,HTTP规范允许设置多个具有相同名称的HTTP头。是否有任何用例(从客户端到服务器,反之亦然)?
多个消息标题字段 可能存在相同的字段名称 当且仅当整个 该标题字段的字段值是 定义为以逗号分隔的列表 [即#(值)]。它必须是可能的 组合多个标题字段 成为一个“字段名称:字段值” 对,不改变语义 通过附加每个消息 后续的字段值到第一个, 每个用逗号分隔。命令 其中头字段具有相同的 因此,收到字段名称 重要的解释 组合字段值,因此a 代理不得改变顺序 消息的这些字段值 转发。
如果我没有错,则不存在需要多个具有相同名称的标题的情况。
答案 0 :(得分:38)
它通常用于Set-Cookie:
。许多服务器设置了多个cookie。
当然,您始终可以将它们全部设置在一个标题中。
实际上,我认为你不能在一个标题中设置多个cookie。这是一个必要的用例。
Cookie spec确实声称您可以在一个标头中组合多个Cookie,就像其他标头可以组合一样(逗号分隔),但它也指出了不符合的语法(如{{1参数,其值中包含Expires
s)仍然很常见,必须由实现来处理。
因此,如果您在,
标题中使用Expires
参数并且您不希望所有Cookie同时过期,则可能需要使用多个标题。
答案 1 :(得分:17)
由于重复的标头可能会导致各种Web服务器和API出现问题(无论规范是什么),我怀疑是否有任何通用用例,这是最佳做法。当然,这并不是说某个地方的人没有这样做。
答案 2 :(得分:7)
仅允许使用特定格式的标头,请参阅RFC 2616, Section 4.2。
答案 3 :(得分:6)
当您在寻找用例时,Accept
可能是有效的。
答案 4 :(得分:0)
旧线程,但我正在研究同样的问题。无论如何,Accept和Accept-Encoding标头是使用多个值的典型示例,以逗号分隔。即使这些是特定于请求的标头,规范也不区分此级别的请求和响应。检查此页面中的那个。 规范说的是,如果您在标题的值中使用逗号作为字符,则不能使用同名的多个标题,除非您消除逗号的使用歧义。
答案 5 :(得分:-2)
在我看来,只有那些可以用逗号分隔表示(定义)值的标题,可以用多个标题写成一个或多个值。
假设我们有一个标题,其值可以用逗号分隔列表编写。
Entries-In-Order: Jane,John,Charlie
该标头值 的定义有效,服务器或客户端知道它 。然后我们可以将其分开为
Entries-In-Order: Jane,John
Entries-In-Order: Charlie
但是任何标题都不明白逗号分隔的值不能写成多个。
Who-Are-Responsible: John, Jane or maybe Charlie?
根据定义,如果服务器或客户端可能将整个字符串(John,Jane,maybe Charlie?
)作为单个值处理,则将其写为多个标头将无法按预期工作。
My-Dummy-Header: John
My-Dummy-header: Jane or maybe Charlie?