Información sobre el "mismo sitio" y el "mismo origen"

Los términos "same-site" y "same-origin" se citan con frecuencia, pero a menudo se malinterpretan. Por ejemplo, se mencionan en el contexto de las transiciones de página, las solicitudes fetch(), las cookies, la apertura de ventanas emergentes, los recursos incorporados y los iframes.

Origen

Origen

“Origen” es una combinación de un esquema (también conocido como protocolo, por ejemplo, HTTP o HTTPS), nombre de host y puerto (si se especifica). Por ejemplo, con una URL https://www.example.com:443/foo, el "origen" es https://www.example.com:443.

"same-origin" y "cross-origin"

Los sitios web que tienen la combinación del mismo esquema, el mismo nombre de host y el mismo puerto se consideran "mismo origen". Todo lo demás se considera "origen cruzado".

Origen A Origen B Explicación de si los orígenes A y B son "mismo origen" o "origen cruzado"
https://www.example.com:443 https://www.evil.com:443 origen cruzado: dominios diferentes
https://example.com:443. origen cruzado: diferentes subdominios
https://login.example.com:443. origen cruzado: diferentes subdominios
http://www.example.com:443. origen cruzado: diferentes esquemas
https://www.example.com:80 origen cruzado: puertos diferentes
https://www.example.com:443. same-origin: concordancia exacta
https://www.example.com same-origin: Implícito coincide el número de puerto (443)

Sitio

Sitio (TLD+1)

Los dominios de nivel superior (TLD), como .com y .org, se enumeran en la base de datos de la zona raíz. En el ejemplo anterior, "sitio" es la combinación del esquema, el TLD y la parte del dominio justo antes de él (lo llamamos TLD+1). Por ejemplo, con una URL https://www.example.com:443/foo , el "sitio" es https://example.com.

Lista de sufijos públicos y eTLD

En el caso de los dominios que incluyen elementos como .co.jp o .github.io, el uso de .jp o .io no es lo suficientemente detallado como para identificar el "sitio". No hay forma de determinar algorítmicamente el nivel de los dominios registrables para un TLD en particular. Por eso se creó una lista de sufijos públicos definidos en la Lista de sufijos públicos. Estos sufijos públicos también se denominan TLD efectivos (eTLD). La lista de eTLD se mantiene en publicsuffix.org/list.

Para identificar la parte del "sitio" de un dominio que incluye un eTLD, aplica la misma práctica que el ejemplo con .com. Tomando https://www.project.github.io:443/foo como ejemplo, el esquema es https, el eTLD es .github.io y el eTLD+1 es project.github.io, por lo que https://project.github.io se considera el "sitio" para esta URL.

Sitio (eTLD+1)

"mismo sitio" y "entre sitios"

Los sitios web que tienen el mismo esquema y el mismo eTLD+1 se consideran "mismo sitio". Los sitios web que tienen un esquema o un eTLD+1 diferente se consideran "entre sitios".

Origen A Origen B Explicación de si los orígenes A y B son "mismo sitio" o "entre sitios"
https://www.example.com:443 https://www.evil.com:443 entre sitios: diferentes dominios
https://login.example.com:443. same-site: No importan los diferentes subdominios
http://www.example.com:443. entre sitios: diferentes esquemas
https://www.example.com:80 same-site: Los diferentes puertos no importan
https://www.example.com:443. same-site: concordancia exacta
https://www.example.com same-site: Los puertos no son importantes

"mismo sitio sin esquemas"

mismo sitio sin esquema

La definición de "mismo sitio" evolucionó para considerar el esquema de URL como parte del sitio a fin de evitar que HTTP se use como un canal débil. El concepto anterior de "mismo sitio" sin comparación de esquemas ahora se llama "mismo sitio sin esquemas". Por ejemplo, http://www.example.com y https://www.example.com se consideran en el mismo sitio sin esquema, pero no en el mismo sitio, porque solo importa la parte eTLD+1 y no se tiene en cuenta el esquema.

Origen A Origen B Explicación de si los orígenes A y B son "un mismo sitio sin esquema"
https://www.example.com:443 https://www.evil.com:443 entre sitios: diferentes dominios
https://login.example.com:443. Un mismo sitio sin esquema: los diferentes subdominios no son importantes
http://www.example.com:443. Un mismo sitio sin esquema: los esquemas diferentes no importan
https://www.example.com:80 Un mismo sitio sin esquema: los diferentes puertos no son importantes
https://www.example.com:443. mismo sitio sin esquema: concordancia exacta
https://www.example.com un mismo sitio sin esquema: los puertos no importan

Cómo verificar si una solicitud es del tipo "same-site", "same-origin" o "cross-site"

Todos los navegadores modernos (Safari admite próximamente) envían solicitudes junto con un encabezado HTTP Sec-Fetch-Site. El encabezado tiene uno de los siguientes valores:

  • cross-site
  • same-site
  • same-origin
  • none

Si examinas el valor de Sec-Fetch-Site, podrás determinar si la solicitud es "same-site", "same-origin" o "cross-site".