Czy w żądaniu HTTP można podać wiele nagłówków plików cookie?

94

Zazwyczaj przeglądarka grupuje pliki cookie w jednym Cookienagłówku, na przykład:

Cookie: a=1; b=2

Czy standard pozwala na wysyłanie ich jako oddzielnych nagłówków, takich jak:

Cookie: a=1
Cookie: b=2

A może zawsze muszą znajdować się na tej samej linii?

Benzoes
źródło

Odpowiedzi:

129

Znalazłem się na tej stronie, szukając szczegółów na ten temat. Cytat z HTTP State Management Mechanism, RFC 6265 powinna dokonać rzeczy wyraźniej:

5.4. Nagłówek pliku cookie

Gdy agent użytkownika generuje żądanie HTTP, NIE MOŻE dołączać więcej niż jednego pola nagłówka Cookie.

Wygląda na to, że użycie wielu Cookienagłówków jest w rzeczywistości zabronione!

James Chong
źródło
8
Te szalone, nowopowstałe RFC. :)
Kylar
12
Zauważ, że serwer może odpowiedzieć wieloma Set-Cookienagłówkami: tools.ietf.org/html/rfc6265#page-7
Michael Haren
2
Dlaczego głosowanie w dół, o co OP specjalnie zapytał w zakresie żądania HTTP, a nie odpowiedzi HTTP. @JeffDavenport
James Chong
2
Dla tych, którzy przyjeżdżają tutaj z Google, jak Jeff, OP pokazuje, że możesz mieć wiele zmiennych, oddzielając je ";" (miejsce nie jest potrzebne)
Albert Hendriks
2
@HawkeyeParker - can nie oznacza poprawności . Twierdziłbym, że Set-Cookie:a=b;c=d;jest to bardziej poprawne niż Set-Cookie:a=b; Set-Cookie:c=d;gdyby wartości były ustawiane przez jeden serwer. Specyfikacja mówi, że serwer nie powinien składać wielu pól nagłówka Set-Cookie w jedno pole , ale może dodać wiele pól nagłówka Set-Cookie do jednej odpowiedzi . W prawdziwym świecie oznacza to, że gdy serwer proxy przekazuje odpowiedź, jeśli serwer proxy ustawia pliki cookie, powinien używać oddzielnego nagłówka Set-Cookie.
Golphy
24

jest teraz dozwolone w protokole HTTP / 2 ( RFC 7540 ), który określa:

    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
źródło