Как работают куки-файлы браузера?

Из-за странных проблем с файлами / поддоменами, которые я получаю, мне хотелось бы узнать, как браузеры обрабатывают файлы cookie. Если они делают это по-разному, было бы также хорошо узнать различия.

Другими словами - когда браузер получает cookie, этот cookie МОЖЕТ иметь домен и привязанный к нему путь. Или нет, в этом случае браузер, вероятно, заменяет некоторые значения по умолчанию для них. Вопрос 1: что это?

Позже, когда браузер собирается сделать запрос, он проверяет свои куки и отфильтровывает те, которые он должен отправить для этого запроса. Это делается путем сопоставления их с путем запросов и доменом. Вопрос 2: каковы правила соответствия?

Added:

Причина, по которой я спрашиваю об этом, заключается в том, что я заинтересован в некоторых крайних случаях. Подобно:

Will a cookie for .example.com be available for www.example.com? Will a cookie for .example.com be available for example.com? Will a cookie for example.com be available for www.example.com? Will a cookie for example.com be available for anotherexample.com? Will www.example.com be able to set cookie for example.com? Will www.example.com be able to set cookie for www2.example.com? Will www.example.com be able to set cookie for .com? Etc.

Added 2:

Кроме того, кто-то может подсказать, как мне установить cookie, чтобы:

It can be set by either www.example.com or example.com; It is accessible by both www.example.com and example.com.

Ответы на вопрос(8)

Лучше проверить Проект-IETF-httpstate-печенье, работа в процессе

 ZhongYu05 июн. 2015 г., 22:59
сейчас официально rfc 6265.

www.example.com быть в состоянии установить cookie для.com?

Нет, ноexample.com.fr может установить cookie дляexample2.com.fr. Firefox защищает от этого, поддерживая список TLD:http: //securitylabs.websense.com/content/Blogs/3108.asp

Судя по всему, Internet Explorer не позволяет двухбуквенным доменам устанавливать файлы cookie, что, я полагаю, объясняет, почемуo2.ie просто перенаправляет наo2online.ie. Я часто задавался этим вопросом.

 ZhongYu06 июн. 2015 г., 05:24
Правда, и, возможно, вы имеете в виду "dbound". Но это может создать больше проблем; например, создает проблему для реализации http-клиента.
 ZhongYu05 июн. 2015 г., 23:01
"com.fr" понимается как "общедоступный суффикс". Домен cookie не может быть общедоступным суффиксом. см. RFC 6265 и Publicsuffix.org
 TRiG06 июн. 2015 г., 05:17
Да, есть решение, но оно очень грязное. Такого рода маркировка должна быть встроена в DNS, а не по отдельности.
 Dtipson30 нояб. 2016 г., 05:26
Было бы полезно, если бы эта информация каким-то образом передавалась из браузера в javascript. В противном случае невозможно программно определить, можете ли вы установить cookie на определенном уровне домена. Вы не можете проверить этот список при каждом вызове!
Решение Вопроса

RFC 2965 (Set-Cookie2, уже устарелаRFC 2109) чтодолже определяют cookie в настоящее время, большинство браузеров не полностью поддерживают это, но просто соответствуют оригинальная спецификация от Netscape.

Существует различие междуДоменачение атрибута @ и эффективный домен: первый взят изSet-Cookie поле заголовка, и последнее является интерпретацией значения этого атрибута. Согласно RFC 2965, должно применяться следующее:

Если Set-Cookie поле заголовкан естьДоме атрибут, эффективный домен - это домен запроса. Если естьДометрибут @ присутствует, его значение будет использоваться как эффективный домен (если значение не начинается с символа. он будет добавлен клиентом).

Имея эффективный домен, он также должен Домен матч текущий запрашиваемый домен для установки; в противном случае файл cookie будет пересмотрен. То же правило применяется к выбору файлов cookie для отправки в запросе.

Используя эти знания в своих вопросах, применимо следующее:

Печенье сDomain=.example.com вол быть доступным для Www.example.com Печенье сDomain=.example.com вол быть доступным для Example.com Печенье сDomain=example.com будет преобразован в.example.com и поэтомувол также будет доступен для Www.example.com Печенье сDomain=example.com волян быть доступным для Anotherexample.com Www.example.com вол быть в состоянии установить cookie для Example.com Www.example.com волян быть в состоянии установить cookie для Www2.example.com Www.example.com волян быть в состоянии установить cookie для .Com

И установить и прочитать cookie для / от Www.example.com а также Example.com, установите для.www.example.com а также.example.com соответственно. Но первое .www.example.com) будет доступно только для других доменов ниже этого домена (например, Foo.www.example.com или Bar.www.example.com) где.example.com может также быть доступен для любого другого домена ниже Example.com (например, Foo.example.com или Bar.example.com).

 Pacerier18 июл. 2012 г., 07:09
@ Gumbo. Таким образом, a.b.c.example.com может получить доступ к файлу cookie с помощью домена c.example.com
 errah09 апр. 2014 г., 04:43
очен поздний ответ на этот вопрос. Мой собственный опыт и это: Webmasters.stackexchange.com / вопросы / 55790 / ... предположить, что домен example.com не будет доступен для www.example.com, но этот пример предлагает иное. Является ли этот пример неправильным, или я (вполне возможно) недоразумение. Извините за некромантию потоков, но хотел убедиться, что этот превосходный ответ был на 100% точным для будущих смущенных новичков, таких как я:)
 joeforker28 авг. 2018 г., 14:47
Set-Cookie2 сам по себе устарел. Продолжайте использовать Set-Cookie.
 Nabeel Khan26 янв. 2016 г., 05:57
почему настройки для example.com не доступны для www.example.com? (так как это "www" sub of example.com
 ZhongYu06 июн. 2015 г., 00:11
этот ответ немного устарел; видетьмой отве ниже.

RFC 6265 был опубликован в 2011 году, основываясь на консенсусе браузера в то время. С тех пор возникли некоторые сложности с публичными суффиксными доменами. Я написал статью, объясняющую текущую ситуацию -http: //bayou.io/draft/cookie.domain.htm

Подводя итог, правила, которые необходимо соблюдать в отношении домена cookie:

The оригинальный домен cookie - это домен исходного запроса.

Если исходный домен является IP, атрибут cookie домена не должен быть установлен.

Если атрибут cookie домена не задан, cookie применяется только к исходному домену.

Если установлен атрибут домена cookie,

cookie применяется к этому домену и всем его поддоменам; домен cookie должен совпадать или быть родителем исходного домена домен cookie не должен быть ДВУ, общедоступным суффиксом или родителем общедоступного суффикса.

Может быть получено, что cookie всегда применим к его исходному домену.

Домен cookie не должен иметь начальную точку, как в.foo.com - просто используйтеfoo.com

В качестве примера

x.y.z.com может установить домен cookie для себя или родителей -x.y.z.com, y.z.com, z.com. Но нетcom, который является общедоступным суффиксом.a cookie с доменом =y.z.com применимо кy.z.com, x.y.z.com, a.x.y.z.com так далее

Примеры публичных суффиксов -com, edu, uk, co.uk, blogspot.com, compute.amazonaws.com

 Royi Namir18 мар. 2019 г., 08:48
Разве не странно, чтоx.y.z.com может установить cookie наz.com ?
 UpTheCreek18 нояб. 2015 г., 12:58
Каковы последствия ведущей точки?
 roelleor09 июл. 2015 г., 09:47
все ли браузеры следуют RFC 6265?
 ZhongYu09 июл. 2015 г., 16:07
@ roelleor - все наоборот. rfc6265 был написан для того, чтобы подвести итог того, как на самом деле обрабатывались куки-файлы :) да, rfc довольно точно отражает поведение основных браузеров. мои недавние тесты в браузерах подтвердили это. хотя они могут различаться в угловых случаях, связанных с публичными суффиксами.
 ZhongYu08 дек. 2015 г., 22:05
@ UpTheCreek - согласно rfc6265, ведущая точка должна игнорироваться клиентом

RFC2965. Конечно, это не обязательно означает, что все браузеры ведут себя одинаково.

Однако, в общем случае правило для пути по умолчанию, если ни одно из указанных в файле cookie не является путем в URL-адресе, с которого поступил заголовок Set-Cookie. Точно так же для домена по умолчанию используется полное имя хоста в URL-адресе, с которого поступил файл cookie.

Правила сопоставления для домена требуют, чтобы домен cookie соответствовал хосту, к которому выполняется запрос. Файл cookie может указывать более широкое соответствие доменов с помощью include *. в атрибуте домена Set-Cookie (эта область может изменяться браузерами). Сопоставление пути (при условии, что домен совпадает) - это простой вопрос, что запрашиваемый путь должен быть внутри пути, указанного в файле cookie. Обычно сеансовые файлы cookie устанавливаются с помощью пути = / или path = / applicationName /, поэтому файл cookie доступен для всех запросов в приложении.

Ответ на добавленный:

Будут ли файлы cookie для .example.com доступны для www.example.com?Д Будут ли файлы cookie для .example.com доступны для example.com? Не знаю Будет ли файл cookie для example.com доступен для www.example.com? Не должен ... * Будет ли файл cookie для example.com доступен для anotherexample.com? Нет Будет ли www.example.com быть в состоянии установить cookie для example.com?Д Будет ли www.example.com быть в состоянии установить cookie для www2.example.com? Нет (Кроме как через .example.com) Будет ли www.example.com быть в состоянии установить cookie для .com? Нет (Невозможно установить cookie так высоко в пространстве имен, как вы не можете установить его для чего-то вроде .co.uk).

* Я не могу проверить это прямо сейчас, но у меня есть подозрение, что по крайней мере IE7 / 6 будет обрабатывать путьexample.com как если бы это было.example.com.

 Vilx-30 июн. 2009 г., 12:58
Я добавил несколько интересных крайних случаев в свой вопрос. Не могли бы вы похвалить что-нибудь по этому поводу?

таревшие RFC-2965, которые, в свою очередь, устаревшие RFC-2109).

Согласно этому если на сервере не указан атрибут Domain, пользовательский агент вернет cookie только наorigin сервер (сервер, на котором находится данный ресурс). Но это такжепредупреждени что некоторые существующие пользовательские агенты обрабатывают отсутствующий атрибут Domain так, как если бы атрибут Domain присутствовал и содержал текущее имя хоста (например, если Example.com возвращает заголовок Set-Cookie без атрибута домена, эти пользовательские агенты также будут ошибочно отправлять cookie на www.example.com).

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

Так, например:

атрибут атрибутаDomain=.example.com эквивалентноDomain=example.comcookies с такими атрибутами домена будутимеется в наличи для Example.com а также Www.example.comcookies с такими атрибутами домена будутнет в наличи для Another-example.com указание атрибута cookie, напримерDomain=www.example.com закроет путь для Www4.example.com

PS: запятая в атрибуте домена заставит пользовательский агент игнорировать атрибут =

http: //tools.ietf.org/html/rfc296

Это говорит о том, что браузер должен отклонить cookie-файл из x.y.z.com с доменом .z.com, потому что «x.y» содержит точку. Таким образом, если я неправильно интерпретирую RFC и / или приведенные выше вопросы, могут быть добавлены вопросы:

Будут ли файлы cookie для .example.com доступны для www.yyy.example.com? Нет.

Будет ли файл cookie установлен исходным сервером www.yyy.example.com с доменом .example.com, будет ли его значение отправлено пользовательским агентом на xxx.example.com? Нет.

 ZhongYu05 июн. 2015 г., 22:58
что rfc устарел. новый rfc 6265, основанный на консенсусе браузера, позволяет использовать cookie сz.com для применения кz.com а такжевс субдомены.

которые определяют, будет ли браузер принимать заголовок ответа Set-header (запись cookie на стороне сервера), немного другие правила / интерпретации для набора cookie с использованием Javascript (я не тестировал VBScript).

Тогда есть правила, которые определяют, будет ли браузер отправлять куки вместе с запросом страницы.

Существуют различия между основными механизмами браузера, как обрабатываются совпадения доменов и как интерпретируются параметры в значениях пути. Вы можете найти некоторые эмпирические доказательства в статье Как разные браузеры по-разному обрабатывают файлы cookie

Ваш ответ на вопрос