Apakah beberapa header Cookie diperbolehkan dalam permintaan HTTP?

94

Biasanya, browser mengelompokkan cookie ke dalam satu Cookietajuk, seperti:

Cookie: a=1; b=2

Apakah standar mengizinkan untuk mengirim ini sebagai header terpisah, seperti:

Cookie: a=1
Cookie: b=2

Atau apakah mereka selalu harus berada di jalur yang sama?

Benjamin
sumber

Jawaban:

129

Kebetulan pada halaman ini sambil mencari detail tentang topik tersebut. Kutipan dari HTTP State Management Mechanism, RFC 6265 seharusnya membuat semuanya lebih jelas:

5.4. Header Cookie

Saat agen pengguna membuat permintaan HTTP, agen pengguna TIDAK HARUS melampirkan lebih dari satu bidang header Cookie.

Sepertinya penggunaan beberapa Cookieheader yang , pada kenyataannya, dilarang!

James Chong
sumber
8
RFC baru yang gila ini. :)
Kylar
12
Perhatikan bahwa server dapat merespons dengan banyak Set-Cookieheader: tools.ietf.org/html/rfc6265#page-7
Michael Haren
2
Mengapa downvote, seperti yang diminta OP secara khusus dalam hal permintaan HTTP, bukan respons HTTP. @JeffDavenport
James Chong
2
Bagi mereka yang datang ke sini dari Google seperti Jeff, OP menunjukkan Anda dapat memiliki beberapa vars dengan memisahkannya dengan ";" (ruang tidak diperlukan)
Albert Hendriks
2
@HawkeyeParker - bisa tidak berarti benar . Saya berpendapat bahwa Set-Cookie:a=b;c=d;itu lebih benar daripada Set-Cookie:a=b; Set-Cookie:c=d;jika nilainya ditetapkan oleh satu server. Spesifikasi mengatakan server tidak boleh melipat beberapa bidang tajuk Set-Cookie menjadi satu bidang , tetapi dapat menambahkan beberapa bidang tajuk Set-Cookie menjadi satu tanggapan . Artinya di dunia nyata adalah bahwa ketika server proxy memberikan respons, jika proxy tersebut menyetel cookie, ia harus menggunakan header Set-Cookie yang terpisah.
Golphy
24

sekarang diizinkan di HTTP / 2 ( RFC 7540 ), yang menentukan:

    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
sumber