"Mismo sitio" y "Mismo origen"

Eiji Kitamura
Eiji Kitamura

Los términos "Mismo sitio" y "mismo origen" se citan con frecuencia, pero a menudo se malinterpretan. Por ejemplo, se usan en el contexto de transiciones de páginas, solicitudes fetch(), cookies, apertura de ventanas emergentes, iframes y recursos incorporados. En esta página, se explica qué son y en qué se diferencian.

Origen

Origen
La estructura de un origen.

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

"Mismo origen" y "multiorigen"

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

Origen A Origen B ¿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. Mismo origen: concordancia exacta
https://www.example.com Mismo origen: coincide el número de puerto implícito (443)

Sitio

Sitio (TLD+1)
Las partes de una URL que conforman un sitio.

Los dominios de nivel superior (TLD), como .com y .org, se enumeran en Root Zone Database. En el ejemplo
anterior, “sitio” es una 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 con elementos como .co.jp o .github.io, el uso de .jp o .io no es lo suficientemente específico para identificar el "sitio". No hay forma de determinar algorítmicamente el nivel de los dominios registrables para un TLD en particular. Para ayudarte con eso, la lista de sufijos públicos define una lista de sufijos públicos, también llamados 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)
Las partes de una URL con un eTLD.

"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 ¿"Mismo sitio" o "entre sitios"?
https://www.example.com:443 https://www.evil.com:443 Varios sitios: diferentes dominios
https://login.example.com:443. Mismo sitio: los diferentes subdominios no son importantes
http://www.example.com:443. Entre sitios: diferentes esquemas
https://www.example.com:80 Mismo sitio: Los diferentes puertos no son importantes
https://www.example.com:443. Mismo sitio: concordancia exacta
https://www.example.com Mismo sitio: Los puertos no son importantes

"Mismo sitio sin esquemas"

mismo sitio sin esquema

Se cambió la definición de "same-site" para incluir 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 sin esquema en el mismo sitio, pero no en el mismo sitio, porque solo importa la parte eTLD+1 y no se considera el esquema.

Origen A Origen B ¿"Un mismo sitio sin esquema" o "entre sitios"?
https://www.example.com:443 https://www.evil.com:443 Varios sitios: diferentes dominios
https://login.example.com:443. Mismo sitio sin esquema: Los diferentes subdominios no son importantes
http://www.example.com:443. Mismo sitio sin esquemas: Los esquemas diferentes no son importantes
https://www.example.com:80 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 Mismo sitio sin esquema: Los puertos no son importantes

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

Navegadores compatibles

  • 76
  • 79
  • 90
  • 16.4

Origen

Todos los navegadores modernos envían solicitudes con un encabezado HTTP Sec-Fetch-Site. El encabezado tiene uno de los siguientes valores:

  • cross-site
  • same-site (hace referencia al mismo sitio que es esquematizado)
  • same-origin
  • none

Puedes examinar el valor de Sec-Fetch-Site para determinar si la solicitud es del mismo sitio, del mismo origen o entre sitios.

Puedes confiar de manera razonable en el valor del encabezado Sec-Fetch-Site por los siguientes motivos: