"Same site" et "same-origin"

Les termes "même site" et "même origine" sont fréquemment cités, mais souvent mal compris. Par exemple, ils sont utilisés dans le contexte des transitions de page, des requêtes fetch(), des cookies, de l'ouverture de pop-ups, des ressources intégrées et des iFrames. Cette page explique ce qu'ils sont et en quoi ils diffèrent les uns des autres.

Origine

Origine
Structure d'une origine.

"Origin" est une combinaison d'un schéma (également appelé protocole, par exemple HTTP ou HTTPS), d'un nom d'hôte et d'un port (le cas échéant). Par exemple, pour l'URL https://www.example.com:443/foo, l'origine est https://www.example.com:443.

"même origine" et "origine différente"

Les sites Web qui ont la même combinaison de schéma, de nom d'hôte et de port sont considérés comme "de même origine". Tout le reste est considéré comme "cross-origin".

Origine A Origine B "Same-origin" ou "cross-origin" ?
https://www.example.com:443 https://www.evil.com:443 Multidomaine: différents domaines
https://example.com:443 Multi-origine: différents sous-domaines
https://login.example.com:443 Multi-origine: différents sous-domaines
http://www.example.com:443 Multi-origine: différents schémas
https://www.example.com:80 Multi-origine: ports différents
https://www.example.com:443 Même origine: mot clé exact
https://www.example.com Same-origin: le numéro de port implicite (443) correspond

Site

Site (TLD+1)
Parties d'une URL qui constituent un site.

Les domaines de premier niveau (TLD) tels que .com et .org sont listés dans la base de données de la zone racine. Dans l'exemple
précédent, "site" est une combinaison du schéma, du TLD et de la partie du domaine juste avant (que nous appelons TLD+1). Par exemple, pour l'URL https://www.example.com:443/foo, le "site" correspond à https://example.com.

Liste de suffixes publics et eTLD

Pour les domaines contenant 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 de manière algorithmique le niveau de domaines enregistrables pour un TLD donné. Pour vous aider, la liste de suffixes publics définit une liste de suffixes publics, également appelés TLD (eTLD). La liste des eTLD est disponible sur publicsuffix.org/list.

Pour identifier la partie "site" d'un domaine qui inclut un domaine de premier niveau international, appliquez la même pratique que 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)
Composants d'une URL avec un domaine de premier niveau international.

"same-site" et "cross-site"

Les sites Web qui ont le même schéma et le même eTLD+1 sont considérés comme "de même site". Les sites Web qui utilisent un schéma ou un eTLD+1 différents sont "intersites".

Origine A Origine B "Same-site" ou "cross-site" ?
https://www.example.com:443 https://www.evil.com:443 Multisite: différents domaines
https://login.example.com:443 Same-site: les sous-domaines différents n'ont pas d'importance
http://www.example.com:443 Intersites: différents schémas
https://www.example.com:80 Same-site: les ports différents 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

"Same-site sans schéma"

Same-Site sans schéma

La définition de "same-site" a été modifiée pour inclure le schéma d'URL dans le site afin d'empêcher l'utilisation de HTTP comme canal faible. L'ancien concept de "même site" sans comparaison de schémas est désormais appelé "même site sans schéma". Par exemple, http://www.example.com et https://www.example.com sont considérés comme des mêmes sites sans schéma, mais pas comme des mêmes sites, car seule la partie eTLD+1 est importante et le schéma n'est pas pris en compte.

Origine A Origine B "Same-site sans schéma" ou "cross-site" ?
https://www.example.com:443 https://www.evil.com:443 Multisite: différents domaines
https://login.example.com:443 Même site sans schéma: les sous-domaines différents n'ont pas d'importance
http://www.example.com:443 Same-site sans schéma: les différents schémas n'ont pas d'importance
https://www.example.com:80 Same-site sans schéma: les ports différents n'ont pas d'importance
https://www.example.com:443 Same-site sans schéma: correspondance exacte
https://www.example.com Same-site sans schéma: les ports n'ont pas d'importance

Vérifier si une requête est de type "same-site", "same-origin" ou "cross-site"

Browser Support

  • Chrome: 76.
  • Edge: 79.
  • Firefox: 90.
  • Safari: 16.4.

Source

Tous les navigateurs modernes envoient des requêtes avec un en-tête HTTP Sec-Fetch-Site. L'en-tête a l'une des valeurs suivantes:

  • cross-site
  • same-site (fait référence à la méthode same-site avec schéma)
  • same-origin
  • none

Vous pouvez examiner la valeur de Sec-Fetch-Site pour déterminer si la requête est de type "same-site", "same-origin" ou "cross-site".

Vous pouvez raisonnablement faire confiance à la valeur de l'en-tête Sec-Fetch-Site, car: