设置多个具有相同名称的HTTP标头?

时间:2010-07-13 20:38:10

标签: http http-headers

据我所知,HTTP规范允许设置多个具有相同名称的HTTP头。是否有任何用例(从客户端到服务器,反之亦然)?

HTTP 1.1 Section 4.2

  

多个消息标题字段   可能存在相同的字段名称   当且仅当整个   该标题字段的字段值是   定义为以逗号分隔的列表   [即#(值)]。它必须是可能的   组合多个标题字段   成为一个“字段名称:字段值”   对,不改变语义   通过附加每个消息   后续的字段值到第一个,   每个用逗号分隔。命令   其中头字段具有相同的   因此,收到字段名称   重要的解释   组合字段值,因此a   代理不得改变顺序   消息的这些字段值   转发。

如果我没有错,则不存在需要多个具有相同名称的标题的情况。

6 个答案:

答案 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可能是有效的。

  • 接受:application / json
  • 接受:application / xml

答案 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?