Понятия same-site и same-origin
На термины same-site и same-origin часто ссылаются, однако зачастую их неправильно трактуют. Например, они упоминаются в контексте переходов страниц, запросов fetch(), файлов cookie, открытия всплывающих окон, встроенных ресурсов и фреймов.
Источник #
Источник (origin) — это комбинация схемы (также известной как протокол, например, HTTP или HTTPS), имени хоста и порта (если он указан). Например, для URL https://www.example.com:443/foo значение origin будет таким: https://www.example.com:443.
"same-origin" и "cross-origin" #
Веб-сайты, использующие одну и ту же схему, имя хоста и порт, считаются имеющими одинаковый источник (same-origin). Все остальное считается перекрестными источниками (cross-origin).
Сайт #
Домены верхнего уровня (TLD), такие как .com и .org, перечислены в базе данных корневой зоны. В приведенном выше примере сайт (site) — это комбинация TLD и части домена непосредственно перед ним. Например, для URL https://www.example.com:443/foo значение site будет таким: example.com.
Однако для таких доменов, как .co.jp или .github.io, простое использование TLD .jp или .io недостаточно детализировано для определения сайта. И нет никакого способа алгоритмически определить уровень регистрируемых доменов для конкретного TLD. Вот почему был создан список «эффективных TLD» (eTLD). Они определены в списке общедоступных суффиксов. Список eTLD поддерживается по адресу publicsuffix.org/list.
Полное имя сайта — это eTLD+1. Например, если указан URL https://my-project.github.io, eTLD будет .github.io а eTLD+1 — my-project.github.io, что считается сайтом. Другими словами, eTLD+1 — это действующий TLD и часть домена непосредственно перед ним.
"same-site" и "cross-site" #
Веб-сайты с одинаковым eTLD+1 считаются одинаковыми (same-site). Веб-сайты с отличающимися eTLD+1 являются перекрестными (cross-site).
"schemeful same-site" #
Определение same-site развивается, чтобы рассматривать схему URL как часть сайта, чтобы предотвратить использование HTTP в качестве слабого канала. По мере того, как браузеры переходят к этой интерпретации, вы можете видеть ссылки на «один и тот же сайт без схемы» (scheme-less same-site) при обращении к старому определению и на «тот же сайт со схемой» (schemeful same-site) при обращении к более строгому определению. В этом случае http://www.example.com и https://www.example.com покажут значение cross-site, поскольку протоколы не совпадают.
Как проверить, относится ли запрос к same-site, same-origin или cross-site #
Chrome отправляет запросы вместе с HTTP-заголовком Sec-Fetch-Site. По состоянию на апрель 2020 года другие браузеры не поддерживают Sec-Fetch-Site. Это часть более крупного предложения Fetch Metadata Request Headers. Заголовок будет иметь одно из следующих значений:
cross-sitesame-sitesame-originnone
Просмотрев значение Sec-Fetch-Site, вы можете определить, относится ли запрос к типу same-site, same-origin или cross-site (тип schemeful-same-site не фиксируется в Sec-Fetch-Site).