Sono consentite più intestazioni di cookie in una richiesta HTTP?


91

Di solito, un browser raggruppa i cookie in un'unica Cookieintestazione, come ad esempio:

Cookie: a=1; b=2

Lo standard consente di inviarli come intestazioni separate, come ad esempio:

Cookie: a=1
Cookie: b=2

O devono essere sempre sulla stessa linea?

Risposte:


127

È capitato in questa pagina mentre cercavo dettagli sull'argomento. Una citazione da HTTP State Management Mechanism, RFC 6265 dovrebbe rendere le cose più chiare:

5.4. L'intestazione del cookie

Quando l'agente utente genera una richiesta HTTP, l'agente utente NON DEVE allegare più di un campo di intestazione Cookie.

Sembra che l'uso di più Cookieintestazioni sia , in effetti, proibito!


8
Questi pazzi nuovi RFC. :)
Kylar

12
Nota che il server può rispondere con più Set-Cookieintestazioni: tools.ietf.org/html/rfc6265#page-7
Michael Haren

2
Perché il downvote, come OP richiesto specificamente in termini di richiesta HTTP, non risposta HTTP. @JeffDavenport
James Chong

2
Per coloro che vengono qui da Google come Jeff, OP mostra che puoi avere più variabili separandole con ";" (uno spazio non è necessario)
Albert Hendriks

2
@HawkeyeParker - può non implica corretto . Direi che Set-Cookie:a=b;c=d;è più corretto che Set-Cookie:a=b; Set-Cookie:c=d;se i valori fossero impostati da un singolo server. Le specifiche dicono che il server non deve raggruppare più campi di intestazione Set-Cookie in un unico campo , ma può aggiungere più campi di intestazione Set-Cookie in un'unica risposta . Ciò che significa nel mondo reale è che quando un server proxy trasmette una risposta, se quel proxy imposta i cookie, dovrebbe utilizzare un'intestazione Set-Cookie separata.
Golphy

23

ora è consentito in HTTP / 2 ( RFC 7540 ), che specifica:

    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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.