Что означает префикс точки в домене cookie?

93

введите описание изображения здесь

В чем разница между local.test.comи .local.test.com? Скриншот взят из Chrome.

потрошитель234
источник
1
Вот хорошая запись: erik.io/blog/2014/03/04/definitive-guide-to-cookie-domains
user2864740
В комментарии от user2864740 26 сен 2016, 16:44 - Ссылка мертва, очевидно, домен erik.io перешел к другому пользователю или регистратору домена.
qxotk

Ответы:

58

local.test.comбудет использоваться для домена, а .local.test.comтакже для поддоменов.

JoRouss
источник
11
Так local.test.comчто не будет применяться к x.local.test.com, но .local.test.comотносится и к, local.test.comи к x.local.test.com?
ripper234 08
29
Я считаю, что это неверно. Файлы cookie используются всеми подчиненными субдоменами с точкой или без нее. Вы можете думать о субдоменах как о «наследующих» куки от своих родительских. Таким образом, установка cookie на example.com устанавливает его на blog.example.com и my.blog.example.com. Установка файла cookie на blog.example.com устанавливает его на this.is.my.blog.example.com и на каждый промежуточный субдомен. Но, как и наследование, обратное неверно. Установка файла cookie на blog.example.com не приводит к его установке на example.com.
geddski
6
Тем не менее, вы МОЖЕТЕ ограничить cookie только хостом, не задавая домен cookie вообще (или установив пустую строку). Это, как ни странно, установит cookie только для хоста (example.com), а не для любого из его поддоменов.
geddski
8
Чтобы уточнить на основе другого ответа, раньше точка имела значение, но теперь это не так. Файл cookie будет отправлен в любой поддомен указанного домена с точкой в ​​начале или без нее. Фактически контролирует, передается ли он субдоменам, так это то , устанавливаете ли вы домен в cookie или нет. Если вы вообще не указали домен, cookie будет отправлен только на тот домен, который его выпустил. Он никогда не будет отправлен в менее специфичные родительские домены (например, «local.test.com» не будет включен в запросы к «test.com»), и он будет отправлен только в соответствующие поддомены, если вы установите значение домена.
Трийнко 04
4
@Triynko, точка имеет значение, когда вы привязываете для обновления cookie. Мне не удалось выделить все правила, но я видел, что результаты различаются в зависимости от наличия или отсутствия ведущей точки, и это непросто. Как это работает, зависит от браузера и не всегда интуитивно понятно. Контроль того, есть ли в названии кухни начальная точка в браузере, - не самая простая задача программирования, которую я когда-либо делал.
DanAllen
83

Первая точка означает, что файл cookie также действителен для поддоменов; тем не менее последние спецификации HTTP (RFC 6265) изменили это правило, поэтому современные браузеры не должны заботиться о начальной точке. Точка может понадобиться старому браузеру, реализующему устаревший RFC 2109.

RFC 6265 раздел 4.1.2.3

Например, если значение атрибута Domain - «example.com», пользовательский агент будет включать файл cookie в заголовок Cookie при выполнении HTTP-запросов к example.com, www.example.com и www.corp.example. com. (Обратите внимание, что начальный% x2E («.»), Если он присутствует, игнорируется, даже если этот символ не разрешен, но конечный% x2E («.»), Если он присутствует, заставит пользовательский агент игнорировать атрибут. )

Timido
источник
1
RFC датирован апрелем 2011 года. И IE8, и IE9 изначально были выпущены до этой даты и, к сожалению, все еще используются. Итак, я предполагаю (не пробовал), что им нужна ведущая точка. Кто-нибудь знает, сколько браузеров все еще работают на старом RFC?
BlaM
erik.io/blog/2014/03/04/definitive-guide-to-cookie-domains рекомендует использовать начальную точку для лучшей совместимости, когда вы хотите включить поддомены. Это требование совместимости будет только уменьшаться. (Не требуется для 6255, но требуется и с тем же конечным результатом, что и для 2109.)
user2864740
12

Из статьи Полное руководство по доменам cookie и почему префикс www делает ваш сайт безопаснее :

Вывод

Хотя определения несколько отличаются, мы можем упростить его для любой из этих реализаций следующим образом:

  • Если в файле cookie не установлен домен, файл cookie должен соответствовать только точному имени хоста запроса. [ПРИМЕЧАНИЕ: это отличается от возврата Set-Cookie с доменом без точки!] Нет поддоменов, нет частичных совпадений. Это означает, что просто не включать атрибут домена - нельзя устанавливать пустой атрибут домена. К сожалению, Internet Explorer, похоже, рассматривает это как имя хоста вместе с любыми поддоменами .

  • При настройке домена в cookie безопасный вариант - поставить перед ним точку, например .erik.io. Файл cookie будет соответствовать всем поддоменам.

  • Установка домена cookie без предшествующей точки, например erik.io, недопустима в реализациях RFC 2109 и приведет к тому же поведению, что и с предыдущей точкой в ​​других реализациях. Невозможно ограничить cookie конкретным явно заданным доменом без включения поддоменов.

Другие заслуживающие внимания наблюдения:
  • Во всех RFC указанный домен cookie должен совпадать с текущим именем хоста при нормальном сопоставлении. Установка cookie для www.erik.io в ответе от erik.io недействительна, так как cookie с доменом www.erik.io не соответствует erik.io, первый более конкретен.

  • В RFC 6265 домены явно имеют нижний регистр при синтаксическом анализе заголовка Set-Cookie.

user2864740
источник
1

Первая точка в ".local.test.com" - это то, как Chrome просматривает файлы cookie с набором "Domain = local.test.com" (или "Domain = .local.test.com", что то же самое).

Определения Set-Cookie без "Domain = something" рассматривают домен (= хост) без начальной точки.

Таким образом, ведущая точка в chrome не отражает, использовалась ли ведущая точка с сервера, но имеет ли этот файл cookie в своем определении с сервера «Домен = что-то». (И если это так, файл cookie также будет отправлен в поддомены).

По крайней мере, это то, что показывают мои тесты. Chrome должен упростить чтение, например, просмотреть точную строку, которая определяет файл cookie и время его получения.

Кьетил С.
источник