"Mismo sitio" y "Mismo origen"

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 las transiciones de páginas, las solicitudes fetch(), las cookies, la apertura de ventanas emergentes, los recursos incorporados y los iframes. En esta página, se explica qué son y en qué se diferencian entre sí.

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.

"Del mismo origen" y "de origen diferente"

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

Origen A Origen B ¿Es de "mismo origen" o "origen cruzado"?
https://www.example.com:443 https://www.evil.com:443 Origen cruzado: diferentes dominios
https://example.com:443 Origen cruzado: subdominios diferentes
https://login.example.com:443 Origen cruzado: subdominios diferentes
http://www.example.com:443 Origen cruzado: esquemas diferentes
https://www.example.com:80 Origen cruzado: puertos diferentes
https://www.example.com:443 Mismo origen: concordancia exacta
https://www.example.com Mismo origen: El número de puerto implícito (443) coincide

Sitio

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

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 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, usar solo .jp o .io no es lo suficientemente específico como para identificar el "sitio". No hay forma de determinar de forma algorítmica el nivel de dominios registrables para un TLD en particular. Para ayudar 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 "sitio" de un dominio que incluye un TLD extendido, aplica la misma práctica que en 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 TLD electrónico.

"del mismo sitio" y "entre sitios"

Los sitios web que tienen el mismo esquema y el mismo eTLD+1 se consideran "del mismo sitio". Los sitios web que tienen un esquema o un eTLD+1 diferentes son "multisitios".

Origen A Origen B ¿Es "del mismo sitio" o "en varios sitios"?
https://www.example.com:443 https://www.evil.com:443 Entre sitios: diferentes dominios
https://login.example.com:443 Mismo sitio: Los diferentes subdominios no importan.
http://www.example.com:443 Entre sitios: diferentes esquemas
https://www.example.com:80 En el mismo sitio: No importa que los puertos sean diferentes.
https://www.example.com:443 Mismo sitio: concordancia exacta
https://www.example.com En el mismo sitio: los puertos no importan

"Sin esquema del mismo sitio"

SameSite sin esquema

La definición de "mismo sitio" cambió para incluir el esquema de URL como parte del sitio para evitar que se use HTTP como un canal débil. El concepto anterior de "mismo sitio" sin comparación de esquemas ahora se denomina "mismo sitio sin esquema". Por ejemplo, http://www.example.com y https://www.example.com se consideran del mismo sitio sin esquema, pero no del mismo sitio, ya que solo importa la parte del eTLD+1 y no se considera el esquema.

Origen A Origen B ¿Es "sin esquema del mismo sitio" o "entre sitios"?
https://www.example.com:443 https://www.evil.com:443 Entre sitios: diferentes dominios
https://login.example.com:443 Sin esquema de mismo sitio: Los diferentes subdominios no importan
http://www.example.com:443 Sin esquema de Same-Site: Los diferentes esquemas no importan
https://www.example.com:80 Sin esquema del mismo sitio: No importa que los puertos sean diferentes.
https://www.example.com:443 Sin esquema del mismo sitio: concordancia exacta
https://www.example.com Sin esquema del mismo sitio: los puertos no importan

Cómo verificar si una solicitud es "del mismo sitio", "del mismo origen" o "entre sitios"

Browser Support

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

Source

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 (se refiere a la misma ubicación con esquema)
  • 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 razonablemente en el valor del encabezado Sec-Fetch-Site porque: