В последних Chrome 113、114
two выпусках было два изменения в отношении файлов cookie:
Chrome 113
: Собственный набор файлов cookie (First-Party Sets
) в стабильной версии;Chrome 114
: отдельный раздел файлов cookie (CHIPS
) включен по умолчанию для всех браузеров;
Оба они являются изменениями в способе доступа к файлам cookie, чтобы справиться с предстоящим полным прекращением поддержки сторонних файлов cookie. Chrome
Два года назад планировалось полностью отказаться от сторонних куки, потому что это изменение слишком сильно повлияло на текущий сайт. Если от него напрямую отказаться, обычные функции большого количества веб-сайтов могут не использоваться в обычном режиме.
Кроме того, это также оказывает очень большое влияние на Google
собственный рекламный бизнес Chrome
, поэтому его приходится откладывать снова и снова, чтобы иметь возможность запустить решение, которое не имеет большой влияние на существующий бизнес, может обеспечить плавную миграцию пользователей и защитить конфиденциальность пользователей. .
В настоящее время, благодаря стабильному запуску собственной коллекции файлов cookie и возможности независимого разделения файлов cookie, день, когда сторонние файлы cookie будут полностью запрещены, кажется, не за горами. Эти два изменения действительно могут решить большую часть бизнеса, который обычно использует сторонние файлы cookie. Сценарий, но способ чтения файлов cookie может сильно измениться.
Сегодня я попрошу вас заранее объяснить эти два изменения в файлах cookie. Вы также должны заранее подготовить стратегии миграции и решения проблем, чтобы гарантировать, что веб-сайт не будет затронут после отключения сторонних файлов cookie в будущем.
Файлы cookie третьих лиц
Хотя это клише, давайте сначала объясним, какие файлы cookie принадлежат третьей стороне и какие проблемы в настоящее время возникают у сторонних файлов cookie.
Сторонние файлы cookie и файлы cookie одной стороны
Принадлежность файла cookie к одностороннему или трехстороннему файлу cookie зависит только от двух факторов:
- Под каким доменным именем установлен файл cookie?
- На каком сайте был установлен файл cookie
С двумя конкретными примерами, теперь мы посещаем веб-сайт www.google.com: Затем мы также запрашиваем множество интерфейсов на этом веб-сайте, таких как www.google.com/api/user, эти интерфейсы передают set-cookie
это Header
на нашем сайте установлено очень много куки, т.к. доменное имя запроса и доменное имя текущего сайта находятся на одном сайте, поэтому куки этих интерфейсов относятся к кукам одной стороны.
Однако веб-сайт не обязательно называет доменное имя того же сайта. Например, веб-сайт www.google.com также вызывает множество интерфейсов под youtube.com. Эти межсайтовые интерфейсы также set-cookie
plant, поскольку доменное имя файла cookie и доменное имя текущего веб-сайта являются веб-сайтом, а этот тип файла cookie относится к трехстороннему файлу cookie.
Что не так со сторонними файлами cookie?
Наш сайт не может вызывать только интерфейс доменного имени того же сайта. Это нормально вызывать интерфейс других доменных имен, поэтому наличие сторонних файлов cookie является нормальным явлением. Мы также выполнили множество обычных задач с помощью сторонних файлов cookie, таких как управление журналами, вход в систему одним нажатием, анализ конверсии рекламы и многое другое. Так зачем его отключать? В основном из-за проблем с конфиденциальностью пользователей.
Например, в настоящее время мы загружаем видео на Youtube, но Youtube часто загружает запросы от многих сторонних рекламодателей, и эти сторонние рекламодатели могут использовать сторонние файлы cookie для записи некоторых действий пользователей. Затем в следующий раз, когда вы посетите Google, вы также можете снова загрузить его для этого рекламодателя, потому что в это время сторонняя реклама записала многие ваши действия пользователя с помощью стороннего файла cookie и уже знает, что вам нравится, поэтому вы будете получить точный рекламный толчок, ваша конфиденциальность была незаметно просочилась.
За границей конфиденциальность пользователей является совершенно правильной вещью, поэтому Safira и Firefox, два основных браузера, были вынуждены отключить сторонние файлы cookie, то есть, если вы посещаете www.google.com
этот youtube.com
запрос доменного имени нельзя засадить печеньками.
В настоящее время только Chrome
все еще пытается поддерживать поддержку, в конце концов, Chrome
текущая доля браузера на рынке является самой большой, и его прямое отключение окажет большое влияние на рекламный бизнес Google
из . Так что Chrome
вам нужно дождаться альтернативы, приемлемой для всех, прежде чем отключать ее.
Два сценария, в которых вы можете столкнуться с проблемами
Для наших обычных разработчиков все еще существует множество сценариев, которые могут быть затронуты, и мы должны внести соответствующие изменения, прежде чем отключать их, например, следующие два сценария.
Сторонний файл cookie iframe
Первый сценарий — это когда нам нужно поделиться состоянием со встроенным сторонним iframe. Если мы уже разработали общий чат, его доменное имя support.chat.example
, и у нас есть много бизнес-сайтов (например, retail.example
), на которые мы хотим встроить это окно чата, как iframe
из . Эта встроенная служба чата может полагаться на Cookie
для сохранения истории взаимодействия пользователя. Поскольку iframe
имя домена и текущий веб-сайт преувеличены, поэтому iframe
подсаженное Cookie
принадлежит третьей стороне Cookie
.
Если нет возможности настроить межсайтовый Cookie
tripartite , тогда нашей службе чата support.chat.example
, возможно, придется больше полагаться на некоторые идентификаторы, которые родительский веб-сайт retail.example
активно передает им для сеанс первой стороны. Поскольку этот вид службы чата часто является общим, поэтому каждый веб-сайт, который встраивает support.chat.example
службу чата, требует дополнительных настроек для передачи статуса, и это значительно увеличивает стоимость разработки и доступа.
В качестве альтернативы мы также можем разрешить службе чата support.chat.example
запрашивать retail.example
страницу на нашем веб-сайте JavaScript
. Но это создает очень большой риск для безопасности, и это ненадежный метод. Аналогичные возможные сценарии включают в себя:
- Трехсторонний картографический сервис
- Подресурс
CDN
балансировка нагрузки Headless CMS
провайдер- Домены-песочницы для ненадежного пользовательского контента
- Трехсторонняя встроенная реклама
Файлы cookie сторонних сайтов
Кроме того, есть еще один сценарий. Это слишком узко, чтобы определить, что файлы cookie принадлежат третьим сторонам в соответствии с разными доменными именами. Ведь у компании не может быть только одно доменное имя:
Например, мы упомянули выше www.google.com
и www.youtube.com
, хотя имена доменов разные, такие файлы cookie также называются трехсторонними файлами cookie, но любой человек с проницательным взглядом может увидеть, что youtube находится в google, и эти два доменных имени принадлежат одному и тому же семейству.
Если сторонние файлы cookie отключены, нормальная возможность совместного использования файлов cookie под разными доменными именами компании будет недоступна, что окажет большое влияние на обычные потребности бизнеса. Распространенным сценарием является единый вход. Часто нам нужно войти в систему только один раз при входе на разные веб-сайты компании. Это связано с тем, что личная информация пользователя хранится в файле cookie общедоступной службы входа в систему. Если сторонние файлы cookie отключены, информация для входа не может быть передана. Давайте посмотрим, как решить две вышеупомянутые проблемы.
Независимый раздел файлов cookie (CHIPS)
Прежде всего, давайте посмотрим на независимый раздел файлов cookie ( ), включенный Chrome 114
по умолчанию для всех пользователей CHIPS
, который используется для решения проблемы трехстороннего iframe
общего состояния.
Как решить проблему?
Раздельное состояние Cookie (CHIPS)
позволяет разработчикам размещать файлы cookie в «разделенном» хранилище, отдельном для каждого сайта верхнего уровня Cookie jar
.
Chrome официально описывает это следующим образом: CHIPS – это важный шаг, помогающий службам плавно переходить на будущее без сторонних файлов cookie.
CHIPS
Введен новый Cookie
атрибут : Partitioned
, который позволяет контексту верхнего уровня решать, какой Cookie
разделить.
Например, если мы iframe
embed , при нормальных обстоятельствах, если третья сторона Cookie
отключена, C не сможет получить доступ к Cookie
it.
Если C указывает атрибут Cookie
для Partitioned
, этот файл cookie будет сохранен в специальном секционированном банке. Он вступит в силу только тогда, когда сайт А встроит сайт С через iframe, и браузер определит, что файл cookie будет отправлен только тогда, когда сайт верхнего уровня будет А.
Когда пользователь посещает новый сайт, например сайт B, если он встраивает сайт C через iframe, то сайт C под сайтом B не может получить доступ к файлу cookie, установленному ранее для A.
Если пользователь посещает сайт C напрямую, он также не сможет получить доступ к этому файлу cookie.
Это решает проблему совместного использования файлов cookie iframe тремя сторонами, защищая при этом конфиденциальность пользователей.
как использовать?
Метод реализации также очень прост. Как упоминалось выше, если вы хотите сохранить на текущем веб-сайте Cookie
три стороны, которыми необходимо поделиться, вам нужно всего лишь добавить атрибут Partitioned
. Кроме того, существует предварительное условие, согласно которому Cookie
должен иметь Secure
атрибут :
Set-Cookie: name=ConardLi; SameSite=None; Secure; Path=/; Partitioned;
детали реализации
Partitioned
Атрибут фактически изменяет механизм раздела хранилища файлов cookie, делая раздел более строгим. В приведенном выше примере мы https://support.chat.example
iframe
встроили на страницу https://retail.example
. Partitioned
До , уникальный идентификатор раздела Cookie: support.chat.example
, а после включения Partitioned
уникальный идентификатор раздела становится ("https", "retail.example") + support.chat.example
.
Firefox
В режиме ETP
strict и приватном просмотре все сторонние сайты cookie
по умолчанию разделены на разделы, поэтому все межсайтовые сайты cookie
по умолчанию будут разбиты на разделы в соответствии с сайтом верхнего уровня. Однако cookie
разделение может вызвать некоторые непредвиденные проблемы, так как в определенных сценариях могут использоваться неразделенные сторонние ресурсы cookie
.
Safari
Некоторые Cookie
разделения , но в итоге от них отказались, и в настоящее время три стороны полностью заблокированы Cookie
. Одна из причин заключается в том, что разработчики могут быть запутаны. . Однако кажется, что какой-то Cookie
partition .
В настоящее время я Chrome
думаю, что Cookie
идея эвристического разбиения на разделы, предоставляемая . Он не только решает проблему межсайтового отслеживания, но и в определенной степени удовлетворяет потребности пользователей. Я надеюсь, что другие браузеры смогут извлечь из этого уроки.
Собственные наборы файлов cookie
Выше мы решили проблему трехстороннего совместного использования состояния iframe, Cookie First-Party Sets
и то, что используется для решения проблемы пользовательского сбора файлов cookie, то есть он предоставляет Cookie
способ выборочного изменения некоторых из трех сторон. к одному.
Как решить проблему?
Как мы упоминали ранее, многие организации или компании имеют несколько доменных имен, поэтому слишком строго различать, принадлежит ли файл cookie первой стороне или третьей стороне, только по разнице в имени домена.
First-Party Sets
Это равносильно предоставлению возможности разработчикам веб-сайтов. Хотя некоторые файлы cookie являются сторонними в соответствии с разделением доменных имен, вы можете указать некоторые файлы cookie и поместить их в коллекцию. Специальная форма для чтения.
Иными словами, youtube.com、google.com
хотя эти два доменных имени принадлежат одной и той же организации, вы Chrome
этого не знаете. Вы можете сказать, что Chrome
эти разные доменные имена принадлежат одной и той же организации, поместив их в коллекцию.
как использовать?
Согласно вышеизложенной идее решения задачи, два шага First-Party Sets
являются:
- Шаг 1: поместите разные доменные имена, которыми вы хотите
Cookie
поделиться, в коллекцию, а затем отправьте ее наChrome
; - Шаг 2. Используйте специальный метод
Chrome
, предоставленный для чтения общих имен в этих коллекциях доменных именCookie
;
В раннем предложении Cookie
, samePaty
был добавлен новый атрибут для , вы можете использовать этот атрибут, чтобы сообщить браузеру, какие файлы cookie должны использоваться тремя сторонами, а затем вам нужно указать общее доменное имя collection в каталоге развертывания веб-сайта, как я писал ранее. Статья, посвященная этому методу: Подробно объясните новый атрибут SameParty файла cookie.
Однако ограничения этого метода слишком слабы. Веб-сайты могут легко снова реализовать трехсторонний обмен файлами cookie, а стратегия совместного использования недостаточно прозрачна. Поэтому в Chrome решили отказаться от этого решения и реализовать более сложный метод. .
Сначала вам нужно предоставить файл JSON, в котором вы указываете, какие доменные имена должны быть Cookie
shared , а затем вам нужно Pull Request
отправить этот файл JSON Chrome
в Github
репозиторий. предоставлено: https://github.com/GoogleChrome/first-party-sets
Кроме того, формат файла JSON должен соответствовать спецификации. Ниже приведен пример:
{ "primary": "https://primary.com", "associatedSites": ["https://associate1.com", "https://associate2.com", "https://associate3.com", "https://associate4.com"], "serviceSites": ["https://servicesite1.com"], "rationaleBySite": { "https://associate1.com": "An explanation of how you clearly present the affiliation across domains to users and why users would expect your domains to be affiliated", "https://associate2.com": "An explanation of how you clearly present the affiliation across domains to users and why users would expect your domains to be affiliated", "https://associate3.com": "An explanation of how you clearly present the affiliation across domains to users and why users would expect your domains to be affiliated", "https://serviceSite1.com": "An explanation of how each domain in this subset supports functionality or security needs." }, "ccTLDs": { "https://associate1.com": ["https://associate1.ca", "https://associate1.co.uk", "https://associate1.de"], "https://associate2.com": ["https://associate2.ru", "https://associate2.co.kr", "https://associate2.fr"], "https://primary.com": ["https://primary.co.uk"] } }
При этом есть несколько ключевых понятий:
ccTLDs
Доменное имя: веб-сайт может обслуживать разные страны, и каждый регион имеет определенное доменное имя, напримерconardli.cn、conardli.jp、conardli.en
etc.Service
Доменное имя: веб-сайт может использовать определенное доменное имя для обеспечения безопасности или повышения производительности, но веб-сайты с разными доменными именами также могут нуждаться в совместном использовании идентификационных данных пользователей.Associated
Доменное имя. В рамках одной организации может существовать несколько разных суббрендов, соответствующих разным доменным именам, например,google.com、youtube.com
в этом случае.
PR
После фиксации Google
команда вручную обновит Review
и PR
. (Я не знаю, что Chrome
команда... После того, как сайтов стало больше, должно быть много PR каждый день. Такой метод обслуживания реально осуществим??)
После того, как ваша конфигурация JSON будет объединена командой Chrome, это не означает, что вы можете свободно делиться сторонними файлами cookie под этими доменными именами. Также нужно использовать спец. Ниже приведен демонстрационный код Storage Access API(SAA)
:
https://glitch.com/edit/#!/first-party-sets
Разберем его, в первую очередь, чтобы определить, поддерживает ли браузер этот API:
/* * Judge broswer version by UA */ if (navigator.userAgentData.brands.some(b => { return b.brand === 'Google Chrome' && parseInt(b.version, 10) >= 108 })) { // Supported } else { // Not supported } /* * Judge SAA 和 rSAFor API can use */ if ('requestStorageAccess' in document) { // SAA available } else { // SAA not available } if ('requestStorageAccessForOrigin' in document) { // rSAFor available } else { // rSAFor not available }
Используйте requestStorageAccess
, чтобы определить, предоставил ли пользователь Cookie
доступ третьей стороне и доступ ко всему, что можно прочитать Cookie
:
if ('requestStorageAccess' in document) { document.requestStorageAccess().then( (res) => { console.log('permission application passed', res) }, (err) => { console.log('reject', err) } ); }
Используйте requestStorageAccessForOrigin
, чтобы прочитать данные трех сторон, совместно использующих указанное доменное имя Cookie
:
if ('requestStorageAccessForOrigin' in document) { document.requestStorageAccessForOrigin('https://first-party-sets.glitch.me'); location.reload(); } else { window.alert('document.requestStorageAccessForOrigin not enabled.'); }
Наконец
Это тоже слишком хлопотно. Я предполагаю, что такой способ использования отпугнет многих разработчиков в будущем. . . Я надеюсь, что команда Chrome постарается сделать его проще в использовании, но First-Party Sets
он вышел в стабильную версию, и я не думаю, что будет слишком много изменений, поэтому все хотят использовать третье лицо в будущем Cookie
, боюсь, все будет не так просто...
Проектирование красивых теней в CSS
По моему скромному мнению, лучшие веб-сайты и веб-приложения имеют осязаемое «настоящее качество. Существует множество…javascript.plainenglish.io»
Дополнительные материалы на PlainEnglish.io.
Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord .