¿Se permiten varios encabezados de cookies en una solicitud HTTP?

91

Por lo general, un navegador agrupa las cookies en un solo Cookieencabezado, como:

Cookie: a=1; b=2

¿El estándar permite enviar estos como encabezados separados, como:

Cookie: a=1
Cookie: b=2

¿O siempre tienen que estar en la misma línea?

Benjamín
fuente

Respuestas:

127

Descubrí esta página mientras buscaba detalles sobre el tema. Una cita de HTTP State Management Mechanism, RFC 6265 debe hacer las cosas más claras:

5.4. El encabezado de la cookie

Cuando el agente de usuario genera una solicitud HTTP, el agente de usuario NO DEBE adjuntar más de un campo de encabezado de cookie.

¡Parece que el uso de múltiples Cookieencabezados está , de hecho, prohibido!

James Chong
fuente
8
Estos RFC nuevos y locos. :)
Kylar
12
Tenga en cuenta que el servidor puede responder con varios Set-Cookieencabezados: tools.ietf.org/html/rfc6265#page-7
Michael Haren
2
Por qué el voto negativo, como OP pidió específicamente en términos de solicitud HTTP, no respuesta HTTP. @JeffDavenport
James Chong
2
Para aquellos que vienen aquí desde Google como Jeff, OP muestra que puede tener varias vars separándolas con ";" (no se necesita un espacio)
Albert Hendriks
2
@HawkeyeParker - can no implica correcto . Yo diría que Set-Cookie:a=b;c=d;es más correcto que Set-Cookie:a=b; Set-Cookie:c=d;si los valores los establece un solo servidor. La especificación dice que el servidor no debe doblar varios campos de encabezado Set-Cookie en un campo , pero puede agregar varios campos de encabezado Set-Cookie en una respuesta . Lo que eso significa en el mundo real es que cuando un servidor proxy transmite una respuesta, si ese proxy establece cookies, debe usar un encabezado Set-Cookie separado.
Golphy
23

ahora está permitido en 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
wusatosi
fuente