В спецификации HTTP какая строка разделяет файлы cookie?

17

Полукольцо ; , строка Cookie: или какая-либо другая строка?

    
задан lovespring 30.01.2011 в 16:02
источник
  • Связано: содержит ли Set-Cookie несколько файлов cookie? Возможно ли установить более одного файла cookie с одним Set-Cookie? –  Piotr Dobrogost 24.11.2011 в 23:13

2 ответа

30

Проверка файлов cookie в HTTP-запросе

Заголовок Cookie: имеет следующий синтаксис:

Cookie: <Name> = <Value> { ; <Name> = <Value> }

Следовательно, отдельные куки-файлы разделяются точкой с запятой.

Настройка файлов cookie в ответе HTTP

С другой стороны, при настройке файла cookie в ответе есть один файл cookie для заголовка Set-Cookie: :

Set-Cookie: <Name> = <Value> [ ; expires = <Date>] [ ; path = <Path> ] [ ; domain = <Domain> ] // etc…

Чтобы установить несколько файлов cookie, заголовок Set-Cookie повторяется в ответе HTTP.

Примечания:

  • Посмотрите здесь для учебника с примерами и RFC 6265 Механизм управления HTTP-протоколом для нормативной ссылки, отображающей полную информацию о синтаксисе.
  • Устаревший RFC 2965 определил альтернативную пару заголовков Cookie2 и Set-Cookie2 , которые были оставлены.
  • Устаревшие версии механизма управления состояниями HTTP ( RFC 2109 и RFC 2965 ) предоставили способ свернуть несколько Set-Cookie (или Set-Cookie2 ) заголовков в один. Однако эта сворачивание не рекомендуется с помощью последней спецификации RFC 6265 .
ответ дан Ondrej Tucny 30.01.2011 в 16:10
  • С другой стороны, при настройке файла cookie в ответе есть один файл cookie для заголовка Set-Cookie: Not true. В разделе 4.2.1 RFC 2109 один читается. Сервер происхождения может включать в себя несколько заголовков Set-Cookie. Обратите внимание, что промежуточный шлюз может складывать несколько таких заголовков в один заголовок. В разделе 4.2.2 того же RFC, который читается неформально, заголовок ответа Set-Cookie содержит маркер Set-Cookie :, за которым следует запятый список одного или нескольких файлов cookie. –  Piotr Dobrogost 24.11.2011 в 21:25
  • @PiotrDobrogost RFC 2109 устарел RFC 2965, который, в свою очередь, был устареван RFC 6265. В последней спецификации рекомендуется избегать складывания Set-Cookie. Оба 2109 и 2965 не поддерживают фальцовку в представленном синтаксисе ABNF. Спасибо, что указали на эту двусмысленность. Я исправлю ссылку RFC в своем ответе. –  Ondrej Tucny 24.11.2011 в 22:23
  • Оба 2109 и 2965 не поддерживают фальцовку в представленном синтаксисе ABNF. Не верно. Представленный синтаксис ABNF явно поддерживает несколько файлов cookie в одном заголовке Set-Cookie (складывается) - см. Мой ответ. –  Piotr Dobrogost 25.11.2011 в 12:30
  • Следовательно, отдельные куки-файлы разделяются точкой с запятой. Не правда. Точка с запятой в синтаксисе Cookie: заголовок, который вы представляете, разделяет каждую пару <Name> = <Value> не каждый файл cookie, так как каждый куки-файл может иметь любое количество таких пар. –  Piotr Dobrogost 14.03.2013 в 11:10
  • Вы правы. Моя вина. –  Piotr Dobrogost 14.03.2013 в 19:27
Показать остальные комментарии
1

Ответ - знак запятой , .

В разделе 4.2.2 RFC 2109 есть эта спецификация заголовка Set-Cookie

   set-cookie      =       "Set-Cookie:" cookies
   cookies         =       1#cookie

со следующим утверждением Неформально заголовок ответа Set-Cookie содержит маркер Set-Cookie :, за которым следует запятый список одного или нескольких файлов cookie. (Формальное значение # в вышеуказанная нотация определена в RFC 733 в разделе А. НОТАЦИОННЫЕ КОНВЕНЦИИ , пункт 5

  

Конструкция «#» определяется, аналогично «*», следующим образом:

              <l>#<m>element
     

с указанием, по крайней мере, <l> и не более <m> элементов, каждая из которых разделена   одна или несколько запятых (",").

Да, RFC 2109 устарел RFC 2965, который, в свою очередь, был устарел RFC 6265 .
Нет, это ничего не меняет в этом контексте, поскольку

  • большинство существующих HTTP-серверов и клиентов поддерживают RFC 2109
  • RFC 6265 делает не запретить Set-Cookie folding
ответ дан Piotr Dobrogost 24.11.2011 в 23:19
  • Это очень важно. RFC 6265 должен описывать, что на самом деле делают UA. –  Julian Reschke 25.11.2011 в 10:29
  • @JulianReschke Ну в этом случае не могли бы вы рассказать нам, какие из популярных UAs не обрабатывают сложенный заголовок Set-Cookie? –  Piotr Dobrogost 25.11.2011 в 11:09
  • Петр, я понятия не имею, и я этого не сказал. Я просто указывал, что RFC 6265 должен точно определять, как работают cookie, в отличие от старых RFC. –  Julian Reschke 27.11.2011 в 22:55
  • -1, потому что этот ответ прямо противоречит принятому ответу, и автор этого ответа даже признает, что это не запятая в цепочке комментариев принятого ответа. Разве это не должно быть удалено полностью? –  theyetiman 11.02.2016 в 12:46
  • RFC 6265 не запрещает сгибание Set-Cookie (возможно, для обратной совместимости), но он сдерживает его самыми сильными терминами, используя «НЕ СЛЕДУЕТ»: «Origin servers НЕ ДОЛЖНЫ сбрасывать несколько полей заголовка Set-Cookie в один заголовок поле «. –  Lawrence Dol 04.10.2017 в 00:17