"same-site" et "same-origin" sont souvent cités, mais souvent mal compris. Par exemple, ils sont mentionnés dans le contexte des transitions de page, des requêtes fetch()
, des cookies, des pop-ups d'ouverture, des ressources intégrées et des iFrames.
Origine
"Origine" est la combinaison d'un schéma (également appelé protocole, par exemple HTTP ou HTTPS), d'un nom d'hôte et d'un port (si spécifié). Par exemple, pour l'URL https://www.example.com:443/foo
, l'"origine" est https://www.example.com:443
.
"same-origin" et "cross-origin"
Les sites Web qui combinent le même schéma, le même nom d'hôte et le même port sont considérés comme ayant la même origine. Tout le reste est considéré comme provenant d'origines multiples.
Origine A | Origine B | Explication si les origines A et B sont de "même origine" ou "multi-origines" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | multi-origine: domaines différents |
https://example.com:443 | multi-origine: différents sous-domaines | |
https://login.example.com:443 | multi-origine: différents sous-domaines | |
http://www.exemple.com:443 | cross-origin: différents schémas | |
https://www.example.com:80 | cross-origin: différents ports | |
https://www.example.com:443. | same-origin: mot clé exact | |
https://www.example.com | same-origin: correspondances avec le numéro de port implicite (443) |
Site
Les domaines de premier niveau (TLD) tels que .com
et .org
sont répertoriés dans la base de données de la zone racine. Dans l'exemple ci-dessus, "site" est la combinaison du schéma, du domaine de premier niveau et de la partie du domaine qui précède (nous l'appelons TLD+1). Par exemple, pour l'URL https://www.example.com:443/foo
, le "site" est https://example.com
.
Liste des suffixes publics et eTLD
Pour les domaines qui incluent des éléments tels que .co.jp
ou .github.io
, l'utilisation de .jp
ou .io
n'est pas assez précise pour identifier le "site". Il n'existe aucun moyen de déterminer par algorithme le niveau des domaines enregistrables pour un domaine de premier niveau particulier.
C'est pourquoi une liste de suffixes publics définis dans la liste des suffixes publics a été créée. Ces suffixes publics sont également appelés domaines de premier niveau effectifs (eTLD). La liste des eTLD est disponible sur publicsuffix.org/list.
Pour identifier la partie "site" d'un domaine qui inclut un eTLD, suivez la même pratique que dans l'exemple avec .com
. Prenons https://www.project.github.io:443/foo
comme exemple. Le schéma est https
, l'eTLD est .github.io
et l'eTLD+1 est project.github.io
. https://project.github.io
est donc considéré comme le "site" de cette URL.
"same-site" et "cross-site"
Les sites Web ayant le même schéma et le même eTLD+1 sont considérés comme "identiques". Les sites Web dont le schéma ou l'eTLD+1 est différent sont dits "intersites".
Origine A | Origine B | Explication si les origines A et B sont "sur le même site" ou "intersites" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | inter-sites: domaines différents |
https://login.example.com:443 | same-site: les différents sous-domaines n'ont pas d'importance | |
http://www.exemple.com:443 | cross-site: différents schémas | |
https://www.example.com:80 | same-site: les différents ports n'ont pas d'importance | |
https://www.example.com:443. | same-site: mot clé exact | |
https://www.example.com | same-site: les ports n'ont pas d'importance |
"même site sans schéma"
La définition de "même site" a évolué pour prendre en compte le schéma d'URL comme faisant partie du site, afin d'éviter que HTTP ne soit utilisé comme canal faible.
L'ancien concept de "même site" sans comparaison de schémas s'appelle désormais "même site sans schéma". Par exemple, http://www.example.com
et https://www.example.com
sont considérés comme des sites sans schéma sur le même site, mais pas sur le même site, car seule la partie eTLD+1 est importante, et le schéma n'est pas pris en compte.
Origine A | Origine B | Explication si les origines A et B sont "un même site sans schéma" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | inter-sites: domaines différents |
https://login.example.com:443 | Schemeless same-site: différents sous-domaines n'ont pas d'importance | |
http://www.exemple.com:443 | schemeless same-site: les schémas différents n'ont pas d'importance | |
https://www.example.com:80 | Schemeless same-site: les ports différents n'ont pas d'importance | |
https://www.example.com:443. | schemeless same-site: mot clé exact | |
https://www.example.com | schemeless same-site: les ports n'ont pas d'importance |
Vérifier si une requête est de type "same-site", "same-origin" ou "cross-site"
Tous les navigateurs modernes (Safari sera bientôt compatible) envoient les requêtes avec un en-tête HTTP Sec-Fetch-Site
. L'en-tête possède l'une des valeurs suivantes:
cross-site
same-site
same-origin
none
En examinant la valeur de Sec-Fetch-Site
, vous pouvez déterminer si la requête est de type "same-site", "same-origin" ou "cross-site".