Sind in einer HTTP-Anfrage mehrere Cookie-Header zulässig?

91

Normalerweise gruppiert ein Browser Cookies in einem einzigen CookieHeader, z.

Cookie: a=1; b=2

Erlaubt der Standard, diese als separate Header zu senden, wie z.

Cookie: a=1
Cookie: b=2

Oder müssen sie immer auf der gleichen Linie sein?

Benjamin
quelle

Antworten:

127

Zufällig auf dieser Seite, während Sie nach Details zum Thema suchen. Ein Zitat aus HTTP State Management Mechanism, RFC 6265 sollte die Dinge klarer:

5.4. Der Cookie-Header

Wenn der Benutzeragent eine HTTP-Anforderung generiert, darf der Benutzeragent NICHT mehr als ein Cookie-Headerfeld anhängen.

Es sieht aus wie die Verwendung von mehreren CookieHeader ist in der Tat verboten!

James Chong
quelle
8
Diese verrückten RFCs mit neuen Reißzähnen. :)
Kylar
12
Beachten Sie, dass der Server mit mehreren Set-CookieHeadern antworten kann : tools.ietf.org/html/rfc6265#page-7
Michael Haren
2
Warum die Abwertung, wie OP speziell in Bezug auf HTTP-Anfrage gefragt, nicht HTTP-Antwort. @ JeffDavenport
James Chong
2
Für diejenigen, die von Google wie Jeff hierher kommen, zeigt OP, dass Sie mehrere Variablen haben können, indem Sie sie durch ";" (ein Platz wird nicht benötigt)
Albert Hendriks
2
@ HawkeyeParker - Dose bedeutet nicht richtig . Ich würde argumentieren, dass dies Set-Cookie:a=b;c=d;korrekter ist, als Set-Cookie:a=b; Set-Cookie:c=d;wenn die Werte von einem einzelnen Server festgelegt werden. Die Spezifikation besagt, dass der Server nicht mehrere Set-Cookie-Headerfelder in ein Feld falten sollte , sondern mehrere Set-Cookie-Headerfelder zu einer Antwort hinzufügen kann . In der realen Welt bedeutet dies, dass ein Proxy-Server, wenn er eine Antwort weiterleitet und Cookies setzt, einen separaten Set-Cookie-Header verwenden sollte.
Golphy
23

Es ist jetzt in HTTP / 2 ( RFC 7540 ) zulässig , das Folgendes angibt:

    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
quelle