Normalmente, um navegador agrupa cookies em um único Cookie
cabeç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:
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 Cookie
cabeçalhos é , de fato, proibido!
Set-Cookie
cabeçalhos: tools.ietf.org/html/rfc6265#page-7
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.
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