HTTP请求中是否允许多个Cookie标头?


91

通常,浏览器将cookie分组为单个Cookie标头,例如:

Cookie: a=1; b=2

标准是否允许将它们作为单独的标头发送,例如:

Cookie: a=1
Cookie: b=2

还是他们总是必须在同一条线上?

Answers:


127

在寻找有关该主题的详细信息时浏览此页面。从A报价HTTP State Management MechanismRFC 6265应该让事情更清晰:

5.4。Cookie标题

当用户代理生成HTTP请求时,用户代理不得附加多个Cookie标头字段。

它看起来像使用多个Cookie,事实上,禁止!


8
这些疯狂的新奇RFC。:)
凯拉尔

12
请注意,服务器可以使用多个Set-Cookie标头进行响应:tools.ietf.org/html/rfc6265#page-7
Michael Haren

2
为什么要降低投票率,正如OP在HTTP请求而不是HTTP响应方面明确要求的那样。@JeffDavenport
James Chong

2
对于像Jeff这样来自Google的用户,OP显示出您可以使用“;”分隔多个变量。(不需要空间)
Albert Hendriks

2
@HawkeyeParker - CAN并不意味着正确。我认为这Set-Cookie:a=b;c=d;Set-Cookie:a=b; Set-Cookie:c=d;由单个服务器设置值更正确。规范说,服务器不应将多个Set-Cookie标头字段折叠到一个字段中,但可以将多个Set-Cookie标头字段添加到一个响应中。在现实世界中,这意味着代理服务器传递响应时,如果该代理设置cookie,则它应使用单独的Set-Cookie标头。
Golphy

23

现在在HTTP / 2(RFC 7540)中允许使用,它指定:

    8.1.2.5.  Compressing the Cookie Header Field

   The Cookie header field [COOKIE] uses a semi-colon (";") to delimit
   cookie-pairs (or "crumbs").  This header field doesn't follow the
   list construction rules in HTTP (see [RFC7230], Section 3.2.2), which
   prevents cookie-pairs from being separated into different name-value
   pairs.  This can significantly reduce compression efficiency as
   individual cookie-pairs are updated.

   To allow for better compression efficiency, the Cookie header field
   MAY be split into separate header fields, each with one or more
   cookie-pairs.  If there are multiple Cookie header fields after
   decompression, these MUST be concatenated into a single octet string
   using the two-octet delimiter of 0x3B, 0x20 (the ASCII string "; ")
   before being passed into a non-HTTP/2 context, such as an HTTP/1.1
   connection, or a generic HTTP server application.

   Therefore, the following two lists of Cookie header fields are
   semantically equivalent.

     cookie: a=b; c=d; e=f

     cookie: a=b
     cookie: c=d
     cookie: e=f
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.