Entenda os termos "mesmo site" e "mesma origem"
Os termos "mesmo site" (same-site) e "mesma origem" (same-origin) são citados com frequência, mas muitas vezes mal interpretados. Por exemplo, eles são mencionados no contexto de transições de página, solicitações de fetch()
, cookies, abertura de pop-ups, recursos incorporados e iframes.
Origem #

A "origem" é a 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, no URL https://www.example.com:443/foo
, a "origem" é https://www.example.com:443
.
"mesma origem" e "origem cruzada" #
Os sites que possuem a mesma combinação de esquema, nome de host e porta são considerados de "mesma origem". Todos os outros são considerados de "origem cruzada" (cross-origin).
Site #

Os domínios de nível superior (TLDs), como .com
e .org
, estão listados em Root Zone Database. No exemplo acima, "site" é a combinação do TLD e da parte do domínio que o precede. Por exemplo, no URL https://www.example.com:443/foo
, o "site" é example.com
.
No entanto, para domínios como .co.jp
ou .github.io
, usar apenas o TLD de .jp
ou .io
não é detalhado o suficiente para identificar o "site". Além disso, não há como determinar algoritmicamente o nível de domínios registráveis para um determinado TLD. É por isso que uma lista de "TLDs efetivos" (eTLDs) foi criada. Eles são definidos na Public Suffix List (Lista Pública de Sufixos). A lista de eTLDs está disponível em publicsuffix.org/list.
O nome completo do site é o eTLD+1. Por exemplo, no URL https://my-project.github.io
, o eTLD é .github.io
e o eTLD+1 é my-project.github.io
, que é considerado um "site". Em outras palavras, o eTLD+1 é o TLD efetivo e a parte do domínio que o precede.

"mesmo site" e "vários sites" #
Os sites com o mesmo eTLD+1 são considerados o "mesmo site", enquanto aqueles com eTLD+1 diferentes são "vários sites" (cross-site).
"schemeful same-site" #

A definição de "mesmo site" está evoluindo ao considerar o esquema de URL como parte do site, a fim de evitar que o HTTP seja usado como um canal fraco. À medida que os navegadores mudam para essa interpretação, talvez você veja referências a "scheme-less same-site", relacionadas à definição mais antiga, e "schemeful same-site", relacionadas à definição mais estrita. Nesse caso, http://www.example.com
e https://www.example.com
são considerados vários sites porque os esquemas não correspondem.
Como verificar se uma solicitação é de "mesmo site", "mesma origem" ou "vários sites" #
O Chrome envia solicitações junto com um cabeçalho HTTP Sec-Fetch-Site
. Nenhum outro navegador é compatível com Sec-Fetch-Site
desde abril de 2020. Isso faz parte de uma proposta mais ampla de Cabeçalhos de Solicitação de Metadados Fetch (Fetch Metadata Request Headers). O cabeçalho terá 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 é de "mesmo site", "mesma origem" ou "vários sites" ("schemeful-same-site" não é capturado em Sec-Fetch-Site
).