O que são os termos "mesmo site" e "mesma origem"

"mesmo site" e "mesma origem" são termos citados com frequência, mas frequentemente mal interpretados. Por exemplo, eles são mencionados no contexto de transições de páginas, solicitações fetch(), cookies, pop-ups de abertura, recursos incorporados e iframes.

Origem

Origem

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

"mesma origem" e "origem cruzada"

Os sites que têm a combinação do mesmo esquema, nome do host e porta são considerados de "mesma origem". Todo o restante é considerado de "origem cruzada".

Origem A Origem B Explicação se as origens A e B são de "mesma origem" ou "de origem cruzada"
https://www.example.com:443 https://www.evil.com:443 origem cruzada: domínios diferentes
https://example.com:443 origem cruzada: subdomínios diferentes
https://login.exemplo.com:443 origem cruzada: subdomínios diferentes
http://www.exemplo.com:443 origem cruzada: esquemas diferentes
https://www.example.com:80 origem cruzada: portas diferentes
https://www.exemplo.com:443 same-origin: correspondência exata
https://www.example.com mesma origem: número de porta implícito (443) correspondente

Site

Site (TLD+1)

Os domínios de nível superior (TLDs), como .com e .org, estão listados no banco de dados de zona raiz. No exemplo acima, "site" é a combinação do esquema, TLD e a parte do domínio logo antes dele (chamado 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 que incluem itens como .co.jp ou .github.io, usar apenas .jp ou .io não é granular o suficiente para identificar o "site". Não há como determinar, por algoritmos, o nível de domínios registráveis de um TLD específico. É por isso que uma lista de sufixos públicos definidos na Lista de sufixos públicos foi criada. Esses sufixos públicos também são chamados de TLDs efetivos (eTLDs). A lista de eTLDs é mantida em publicsuffix.org/list.

Para identificar a parte do "site" de um domínio que inclui um eTLD, aplique a mesma prática do exemplo com .com. Considerando 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)

"mesmo site" e "entre sites"

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

Origem A Origem B Explicação se as Origens A e B estão no mesmo site ou entre sites
https://www.example.com:443 https://www.evil.com:443 entre sites: domínios diferentes
https://login.exemplo.com:443 same-site: subdomínios diferentes não importam
http://www.exemplo.com:443 entre sites: esquemas diferentes
https://www.example.com:80 same-site: portas diferentes não importam
https://www.exemplo.com:443 same-site: correspondência exata
https://www.example.com same-site: portas não importam

"mesmo site sem esquema"

site sem esquema

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

Origem A Origem B Explicação se as Origens A e B têm um "mesmo site sem esquema"
https://www.example.com:443 https://www.evil.com:443 entre sites: domínios diferentes
https://login.exemplo.com:443 mesmo site sem esquema: subdomínios diferentes não importam
http://www.exemplo.com:443 um site sem esquema: esquemas diferentes não importam
https://www.example.com:80 um site sem esquema: portas diferentes não importam
https://www.exemplo.com:443 mesmo site sem esquema: correspondência exata
https://www.example.com mesmo site sem esquema: as portas não importam

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

Todos os navegadores modernos (com suporte ao Safari em breve) enviam solicitações com um cabeçalho HTTP Sec-Fetch-Site. O cabeçalho tem um dos seguintes valores:

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

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