"same-site" y "same-origen" se citan con frecuencia, pero a menudo son términos que se malinterpretan. Por ejemplo, se mencionan en el contexto de transiciones de página, consultas fetch()
, cookies, ventanas emergentes, recursos integrados y en iframes.
Origin
"Origin (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, dada una URL de 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, nombre de host y puerto se consideran "same-origin (mismo origen)". Todo lo demás se considera "cross-origin (origen cruzado)".
Sitio
Los dominios de nivel superior (TLD) como .com
y .org
se enumeran en la Root Zone Database. En el ejemplo anterior, "sitio" es la combinación del TLD y la parte del dominio inmediatamente anterior. Por ejemplo, dada una URL de https://www.example.com:443/foo
, el "sitio" es example.com
.
Sin embargo, para dominios como .co.jp
o .github.io
, el simple hecho de usar el TLD de .jp
o .io
no es lo suficientemente detallado para identificar el "sitio". Y no hay forma de determinar algorítmicamente el nivel de dominios registrables para un TLD en particular. Es por eso que se creó una lista de "TLD efectivos" (eTLD). Estos se definen en la Public Suffix List (lista de sufijos públicos). La lista de eTLD es mantenida en publicsuffix.org/list.
El nombre completo del sitio se conoce como eTLD 1. Por ejemplo, dada una URL de https://my-project.github.io
, el eTLD es .github.io
y el eTLD 1 es my-project.github.io
, que se considera un "sitio". En otras palabras, el eTLD 1 es el TLD efectivo y la parte del dominio inmediatamente anterior.
"same-site" y "cross-site"
Los sitios web que tienen el mismo eTLD 1 se consideran "same-site (mismo sitio)". Los sitios web que tienen un eTLD 1 diferente son "cross-site (sitio cruzado)".
"schemeful same-site"
La definición de "same-site" está evolucionando para considerar el esquema de URL como parte del sitio para evitar que HTTP se utilice como un canal débil. A medida que los navegadores adopten esta interpretación, es posible que veas referencias a "scheme-less same-site (mismo sitio sin esquema)" cuando se refiera a la definición anterior y "schemeful same-site (mismo sitio esquemático)" refiriéndose a la definición más estricta. En ese caso, http://www.example.com
y https://www.example.com
se consideran cross-site porque los esquemas no coinciden.
Cómo comprobar si una solicitud es "same-site", "same-origin" o "cross-site"
Chrome envía solicitudes junto con una cabecera HTTP de Sec-Fetch-Site
. Ningún otro navegador es compatible con Sec-Fetch-Site
partir de abril de 2020. Esto es parte de una propuesta más grande de Fetch Metadata Request Headers. La cabecera tendrá uno de los siguientes valores:
cross-site
same-site
same-origin
none
Al examinar el valor de Sec-Fetch-Site
, puedes determinar si la solicitud es "same-site", "same-origin" o "cross-site" (el "schemeful-same-site" no se captura en Sec-Fetch-Site
).