Plusieurs en-têtes de cookies sont-ils autorisés dans une requête HTTP?

91

Habituellement, un navigateur regroupe les cookies dans un seul en- Cookietête, tel que:

Cookie: a=1; b=2

La norme permet-elle de les envoyer sous forme d'en-têtes séparés, tels que:

Cookie: a=1
Cookie: b=2

Ou doivent-ils toujours être sur la même ligne?

Benjamin
la source

Réponses:

127

Changé sur cette page en recherchant des détails sur le sujet. Une citation de HTTP State Management Mechanism, RFC 6265 devrait rendre les choses plus claires:

5.4. L'en-tête de cookie

Lorsque l'agent utilisateur génère une requête HTTP, l'agent utilisateur NE DOIT PAS attacher plus d'un champ d'en-tête Cookie.

Il semble que l'utilisation de plusieurs en- Cookietêtes soit , en fait, interdite!

James Chong
la source
8
Ces RFC nouveaux et fous. :)
Kylar
12
Notez que le serveur peut répondre avec plusieurs en- Set-Cookietêtes: tools.ietf.org/html/rfc6265#page-7
Michael Haren
2
Pourquoi le downvote, comme OP l'a spécifiquement demandé en termes de requête HTTP, pas de réponse HTTP. @JeffDavenport
James Chong
2
Pour ceux qui viennent ici de Google comme Jeff, OP montre que vous pouvez avoir plusieurs variables en les séparant par ";" (un espace n'est pas nécessaire)
Albert Hendriks
2
@HawkeyeParker - ne peut pas impliquer correct . Je dirais que Set-Cookie:a=b;c=d;c'est plus correct que Set-Cookie:a=b; Set-Cookie:c=d;si les valeurs sont définies par un seul serveur. La spécification indique que le serveur ne doit pas plier plusieurs champs d'en-tête Set-Cookie en un seul champ , mais il peut ajouter plusieurs champs d'en-tête Set-Cookie en une seule réponse . Ce que cela signifie dans le monde réel, c'est que lorsqu'un serveur proxy transmet une réponse, si ce proxy définit des cookies, il doit utiliser un en-tête Set-Cookie distinct.
Golphy
23

il est désormais autorisé dans HTTP / 2 ( RFC 7540 ), qui spécifie:

    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
la source