Comprendre les termes "même site" et "même origine"

"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

"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

Site (TLD+1)

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.

Site (eTLD+1)

"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"

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".