"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
"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
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.
"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"
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".