São permitidos vários cabeçalhos de cookie em uma solicitação HTTP?


91

Normalmente, um navegador agrupa cookies em um único Cookiecabeçalho, como:

Cookie: a=1; b=2

O padrão permite enviá-los como cabeçalhos separados, como:

Cookie: a=1
Cookie: b=2

Ou eles sempre têm que estar na mesma linha?

Respostas:


127

Acessei esta página enquanto procurava detalhes sobre o assunto. Uma citação de HTTP State Management Mechanism, RFC 6265 deve tornar as coisas mais claras:

5,4 O cabeçalho do cookie

Quando o agente do usuário gera uma solicitação HTTP, ele NÃO DEVE anexar mais de um campo de cabeçalho do cookie.

Parece que o uso de vários Cookiecabeçalhos é , de fato, proibido!


8
Esses RFCs novos e loucos. :)
Kylar

12
Observe que o servidor pode responder com vários Set-Cookiecabeçalhos: tools.ietf.org/html/rfc6265#page-7
Michael Haren

2
Por que o downvote, como OP especificamente perguntou em termos de solicitação HTTP, não resposta HTTP. @JeffDavenport
James Chong

2
Para aqueles que vêm do Google como Jeff, o OP mostra que você pode ter vários vars, separando-os com ";" (um espaço não é necessário)
Albert Hendriks

2
@HawkeyeParker - pode não significa correto . Eu diria que isso Set-Cookie:a=b;c=d;é mais correto do que Set-Cookie:a=b; Set-Cookie:c=d;se os valores fossem definidos por um único servidor. A especificação diz que o servidor não deve dobrar vários campos de cabeçalho Set-Cookie em um campo , mas pode adicionar vários campos de cabeçalho Set-Cookie em uma resposta . O que isso significa no mundo real é que quando um servidor proxy passa uma resposta, se esse proxy definir cookies, ele deve usar um cabeçalho Set-Cookie separado.
Golphy

23

agora é permitido em HTTP / 2 ( RFC 7540 ), que especifica:

    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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.