Bir HTTP isteğinde birden fazla Çerez başlığına izin verilir mi?


94

Genellikle bir tarayıcı, çerezleri aşağıdaki Cookiegibi tek bir başlıkta gruplandırır :

Cookie: a=1; b=2

Standart, bunları ayrı başlıklar olarak göndermeye izin veriyor mu, örneğin:

Cookie: a=1
Cookie: b=2

Yoksa her zaman aynı hatta mı olmalılar?

Yanıtlar:


129

Konuyla ilgili ayrıntıları ararken bu sayfaya tesadüfen rastladım. Bir alıntı HTTP State Management Mechanism, RFC 6265 gerektiğini şeyleri daha net yapmak için:

5.4. Çerez Başlığı

Kullanıcı aracısı bir HTTP isteği oluşturduğunda, kullanıcı aracısı birden fazla Çerez başlık alanı eklememelidir * ZORUNLU *.

Birden kullanımı benziyor Cookiebaşlıklarını edilir , aslında, yasak!


8
Bu çılgın yeni dişli RFC'ler. :)
Kylar

12
Sunucunun birden çok Set-Cookiebaşlık ile yanıt verebileceğini unutmayın : tools.ietf.org/html/rfc6265#page-7
Michael Haren

2
Neden OP'nin özellikle HTTP isteği açısından sorduğu gibi, HTTP yanıtı değil de olumsuz oy. @JeffDavenport
James Chong

2
Buraya Jeff gibi Google'dan gelenler için OP, onları ";" ile ayırarak birden fazla değişkene sahip olabileceğinizi gösterir. (boşluk gerekli değildir)
Albert Hendriks

2
@HawkeyeParker - kutu anlamına gelmez doğru . Bunun , değerlerin tek bir sunucu tarafından ayarlanmasından Set-Cookie:a=b;c=d;daha doğru olduğunu iddia ediyorum Set-Cookie:a=b; Set-Cookie:c=d;. Spesifikasyon, sunucunun birden fazla Set-Cookie başlık alanını tek bir alana katlamaması gerektiğini , ancak tek bir yanıta birden fazla Set-Cookie başlık alanı ekleyebileceğini söylüyor . Gerçek dünyada bunun anlamı, bir proxy sunucusu bir yanıt boyunca geçtiğinde, bu proxy çerezleri ayarlarsa, ayrı bir Set-Cookie başlığı kullanması gerektiğidir.
Golphy

24

artık HTTP / 2'de ( RFC 7540 ) buna izin verilir , bu da şunu belirtir:

    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
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.