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

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

HTTP 1.1第4.2节 :

当且仅当该报头字段的整个字段值被定义为以逗号分隔的列表[即#(值)]时,具有相同字段名的多个消息报头字段可以存在于消息中。 必须将多个头域组合成一个“field-name:field-value”对,而不改变消息的语义,把每个后续的域值附加到第一个域中,每个域都用逗号分隔。 因此,接收具有相同字段名的头部字段的顺序对于组合字段值的解释是重要的,因此当消息被转发时,代理务必不改变这些字段值的顺序。

如果我没有错,就不需要多个同名的头文件。

由于重复标题可能会导致各种networking服务器和API(无论规范说什么)的问题,我怀疑这是最佳实践的任何通用的用例。 当然,这并不是说某个地方不是这样做的。

它通常用于Set-Cookie: 许多服务器设置了多个cookie。

当然,您可以将它们全部放在一个标题中。

其实,我认为你不能在一个头上设置多个cookie。 所以这是一个必要的用例。

Cookie规范声称可以将多个cookie合并到一个头文件中,这与其他头文件可以组合(逗号分隔)的方式是相同的,但是它也指出不符合规则的语法(如Expires参数,其中有价值)仍然很普遍,必须通过实施来处理。

所以,如果你在你的Set-Cookie头文件中使用了Expires params,并且你不希望所有的cookies同时过期,你可能需要使用多个头文件。

它只允许使用非常特定的格式,参见RFC 2616,第4.2节 。

当你在寻找用例时, Accept可能是有效的。

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

老线程,但我正在调查这个相同的问题。 无论如何,接受和接受编docker是典型的例子,使用多个值,逗号分隔。 即使这些是请求特定的头文件,规范在这个级别上也不区分请求和响应。 从这个页面检查一个。 规范说的是,如果在标头的值中有逗号作为字符,则不能使用多个相同名称的标头,除非您消除使用逗号的歧义。

在我看来,只有那些可以用逗号分隔的值来定义的头文件可以用一个或多个值写入多个头文件。

比方说,我们有一个头可以写在逗号分隔列表中的值。

 Entries-In-Order: Jane,John,Charlie 

该头部的值由其定义有效的,并且服务器或客户端知道它 。 然后我们可以把它分开

 Entries-In-Order: Jane,John Entries-In-Order: Charlie 

但是任何头文件不能理解,逗号分隔值不能写成多个。

 Who-Are-Responsible: John, Jane or maybe Charlie? 

如果根据定义,服务器或客户端可能会将整个string( John,Jane,maybe Charlie? )作为一个单独的值来处理,那么将其作为多个头文件写入将无法按预期工作。

 My-Dummy-Header: John My-Dummy-header: Jane or maybe Charlie?