В спецификации HTTP, какая строка разделяет куки? - PullRequest
18 голосов
/ 30 января 2011

Точка с запятой ;, строка Cookie: или какая-либо другая строка?

Ответы [ 2 ]

32 голосов
/ 30 января 2011

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

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

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

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

Настройка файлов 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 (или * 1043) *) заголовки в один. Однако такое складывание не рекомендуется по последним RFC 6265 spec.
1 голос
/ 25 ноября 2011

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

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

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

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

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

              <l>#<m>element

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

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

  • большинство существующих HTTP-серверов и клиентов поддерживают RFC 2109
  • RFC 6265 не запрещать Set-Cookie складывать
...