"Mesmo site" e "mesma origem"

"No mesmo site" e "na mesma origem" são termos frequentemente citados, mas muitas vezes mal interpretados. Por exemplo, eles são usados no contexto de transições de página, solicitações fetch(), cookies, abertura de pop-ups, recursos incorporados e iframes. Esta página explica o que são e como elas diferem uma da outra.

Origem

Origem
A estrutura de uma origem.

"Origem" é uma combinação de um esquema (também conhecido como protocolo, por exemplo, HTTP ou HTTPS), um nome de host e uma porta (se especificada). Por exemplo, considerando um URL de https://www.example.com:443/foo, a "origem" é https://www.example.com:443.

"De mesma origem" e "de origem cruzada"

Os sites que têm a mesma combinação de esquema, nome do host e porta são considerados "de mesma origem". Tudo o que não se enquadra nessa categoria é considerado "de origem cruzada".

Origem A Origem B "De mesma origem" ou "de origem cruzada"?
https://www.example.com:443 https://www.evil.com:443 Cross-origin: diferentes domínios
https://example.com:443 Origem cruzada: subdomínios diferentes
https://login.example.com:443 Origem cruzada: subdomínios diferentes
http://www.example.com:443 Origem cruzada: esquemas diferentes
https://www.example.com:80 Origem cruzada: portas diferentes
https://www.example.com:443 De mesma origem: correspondência exata
https://www.example.com Mesmas origens: número de porta implícita (443) corresponde

Site

Site (TLD+1)
As partes de um URL que compõem um site.

Domínios de nível superior (TLDs) como .com e .org estão listados no banco de dados da zona raiz. No exemplo
anterior, "site" é uma combinação do esquema, do TLD e da parte do domínio logo antes dele (chamamos de TLD+1). Por exemplo, considerando um URL de https://www.example.com:443/foo, o "site" é https://example.com.

Lista de sufixos públicos e eTLD

Para domínios com elementos como .co.jp ou .github.io, o uso de .jp ou .io não é específico o suficiente para identificar o "site". Não há como determinar algoritmicamente o nível de domínios registráveis para um TLD específico. Para ajudar nisso, a lista de sufixos públicos define uma lista de sufixos públicos, também chamados de TLDs efetivos (eTLDs). A lista de eTLDs é mantida em publicsuffix.org/list.

Para identificar a parte "site" de um domínio que inclui um eTLD, aplique a mesma prática do exemplo com .com. Tomando https://www.project.github.io:443/foo como exemplo, o esquema é https, o eTLD é .github.io e o eTLD+1 é project.github.io. Portanto, https://project.github.io é considerado o "site" para esse URL.

Site (eTLD+1)
As partes de um URL com um eTLD.

"no mesmo site" e "entre sites"

Sites que têm o mesmo esquema e o mesmo eTLD+1 são considerados "mesmo site". Os sites que têm um esquema ou um eTLD+1 diferente são "entre sites".

Origem A Origem B "No mesmo site" ou "entre sites"?
https://www.example.com:443 https://www.evil.com:443 Entre sites: domínios diferentes
https://login.example.com:443 No mesmo site: diferentes subdomínios não importam
http://www.example.com:443 Entre sites: esquemas diferentes
https://www.example.com:80 Mesmo site: diferentes portas não importam
https://www.example.com:443 No mesmo site: correspondência exata
https://www.example.com No mesmo site: as portas não importam

"No mesmo site sem esquema"

schemeless same-site

A definição de "mesmo site" mudou para incluir o esquema de URL como parte do site para evitar que o HTTP seja usado como um canal fraco. O conceito mais antigo de "mesmo site" sem comparação de esquema agora é chamado de "mesmo site sem esquema". Por exemplo, http://www.example.com e https://www.example.com são considerados sem esquema, mas não são do mesmo site, porque apenas a parte do eTLD+1 é importante, e o esquema não é considerado.

Origem A Origem B "No mesmo site sem esquema" ou "entre sites"?
https://www.example.com:443 https://www.evil.com:443 Entre sites: domínios diferentes
https://login.example.com:443 No mesmo site sem esquema: subdomínios diferentes não importam
http://www.example.com:443 Sem esquema no mesmo site: esquemas diferentes não importam
https://www.example.com:80 No mesmo site sem esquema: diferentes portas não importam
https://www.example.com:443 No mesmo site sem esquema: correspondência exata
https://www.example.com No mesmo site sem esquema: as portas não importam

Como conferir se uma solicitação é do "mesmo site", da "mesma origem" ou "entre sites"

Browser Support

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

Source

Todos os navegadores modernos enviam solicitações com um cabeçalho HTTP Sec-Fetch-Site. O cabeçalho tem um dos seguintes valores:

  • cross-site
  • same-site (se refere a esquema do mesmo site)
  • same-origin
  • none

É possível examinar o valor de Sec-Fetch-Site para determinar se a solicitação é do mesmo site, da mesma origem ou entre sites.

É possível confiar no valor do cabeçalho Sec-Fetch-Site, porque: