Чи дозволено кілька заголовків файлів cookie в запиті HTTP?


91

Зазвичай браузер групує файли cookie в один Cookieзаголовок, наприклад:

Cookie: a=1; b=2

Чи дозволяє стандарт надсилати їх як окремі заголовки, наприклад:

Cookie: a=1
Cookie: b=2

Або вони завжди повинні бути на одній лінії?

Відповіді:


127

Вибирається на цій сторінці під час пошуку деталей по темі. Цитата з HTTP State Management Mechanism, RFC 6265 повинен зробити речі ясніше:

5.4. Заголовок файлу cookie

Коли агент користувача генерує запит HTTP, агент користувача НЕ ПОВИНЕН додавати більше одного поля заголовка Cookie.

Схоже , що використання декількох Cookieзаголовків є , по суті, заборонено!


8
Ці божевільні новомодні RFC. :)
Kylar

12
Зверніть увагу, що сервер може відповісти кількома Set-Cookieзаголовками: tools.ietf.org/html/rfc6265#page-7
Michael Haren

2
Чому голос проти, як спеціально запитав ОП з точки зору запиту HTTP, а не відповіді HTTP. @JeffDavenport
James Chong

2
Для тих, хто приходить сюди від Google, як Джефф, OP показує, що ви можете мати декілька варіацій, розділяючи їх знаками ";" (пробіл не потрібен)
Альберт Хендрікс,

2
@HawkeyeParker - can не означає, що це правильно . Я б стверджував, що Set-Cookie:a=b;c=d;це правильніше, ніж Set-Cookie:a=b; Set-Cookie:c=d;якщо значення встановлюються одним сервером. Специфікація говорить, що сервер не повинен складати кілька полів заголовка Set-Cookie в одне поле , але він може додати кілька полів заголовка Set-Cookie в одну відповідь . Це означає, що в реальному світі, коли проксі-сервер передає відповідь, якщо цей проксі встановлює файли cookie, він повинен використовувати окремий заголовок Set-Cookie.
Golphy

23

тепер це дозволено в HTTP / 2 ( RFC 7540 ), де вказано:

    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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.