"Same-site" e "same-origin"

I termini "stesso sito" e "stessa origine" vengono citati spesso ma spesso fraintesi. Ad esempio, vengono utilizzati nel contesto di transizioni di pagina, richieste fetch(), cookie, apertura di popup, risorse incorporate e iframe. Questa pagina spiega cosa sono e in che modo si differenziano gli uni dagli altri.

Origin

Origin
La struttura di un'origine.

"Origin" è una combinazione di uno schema (noto anche come protocollo, ad esempio HTTP o HTTPS), di un host e di una porta (se specificata). Ad esempio, dato un URL di https://www.example.com:443/foo, l'"origine" è https://www.example.com:443.

"Stessa-origine" e "cross-origin"

I siti web che hanno la stessa combinazione di schema, nome host e porta sono considerati "stessa-origine". Tutto il resto è considerato "interorigine".

Origine A Origine B "Stessa-origine" o "cross-origin"?
https://www.example.com:443 https://www.evil.com:443 Multiorigine: domini diversi
https://example.com:443 Multiorigine: sottodomini diversi
https://login.example.com:443 Multiorigine: sottodomini diversi
http://www.example.com:443 Multiorigine: schemi diversi
https://www.example.com:80 Multiorigine: porte diverse
https://www.example.com:443 Stessa origine: corrispondenza esatta
https://www.example.com Stessa origine: numero di porta implicito (443) corrispondente

Sito

Sito (TLD+1)
Le parti di un URL che compongono un sito.

I domini di primo livello (TLD) come .com e .org sono elencati nel database della zona radice. Nell'esempio
precedente, "sito" è una combinazione dello schema, del TLD e della parte del dominio appena precedente (lo chiamiamo TLD+1). Ad esempio, dato un URL di https://www.example.com:443/foo, il "sito" è https://example.com.

Elenco di suffissi pubblici ed eTLD

Per i domini con elementi come .co.jp o .github.io, il solo utilizzo di .jp o .io non è sufficientemente specifico per identificare il "sito". Non è possibile determinare in modo algoritmico il livello dei domini registrabili per un determinato dominio di primo livello. Per aiutarti, l'elenco dei suffissi pubblici definisce un elenco di suffissi pubblici, detti anche TLD effettivi (eTLD). L'elenco di eTLD è disponibile all'indirizzo publicsuffix.org/list.

Per identificare la parte "sito" di un dominio che include un eTLD, applica la stessa pratica dell'esempio con .com. Prendendo come esempio https://www.project.github.io:443/foo, lo schema è https, l'eTLD è .github.io e l'eTLD+1 è project.github.io, quindi https://project.github.io è considerato il "sito" di questo URL.

Sito (eTLD+1)
Le parti di un URL con un eTLD.

"stesso sito" e "cross-site"

I siti web che hanno lo stesso schema e lo stesso eTLD+1 sono considerati "stesso sito". I siti web che hanno uno schema diverso o un eTLD+1 diverso sono "cross-site".

Origine A Origine B "Stesso sito" o "cross-site"?
https://www.example.com:443 https://www.evil.com:443 Tra siti: domini diversi
https://login.example.com:443 Stesso sito: sottodomini diversi non sono importanti
http://www.example.com:443 Cross-site: schemi diversi
https://www.example.com:80 Stesso sito: porte diverse non contano
https://www.example.com:443 Stesso sito: corrispondenza esatta
https://www.example.com Stesso sito: le porte non contano

"Schemeless same-site"

stesso sito senza schema

La definizione di "same-site" è stata modificata in modo da includere lo schema URL come parte del sito, al fine di evitare che HTTP venga utilizzato come canale debole. Il precedente concetto di "stesso sito" senza confronto tra schemi ora si chiama "stesso sito senza schema". Ad esempio, http://www.example.com e https://www.example.com sono considerati senza schema same-site ma non same-site, perché solo la parte eTLD+1 è importante e lo schema non viene considerato.

Origine A Origine B "Schemeless same-site" o "cross-site"?
https://www.example.com:443 https://www.evil.com:443 Tra siti: domini diversi
https://login.example.com:443 Same-site senza schema: sottodomini diversi non sono importanti
http://www.example.com:443 Schemeless same-site: schemi diversi non contano
https://www.example.com:80 Same-site schema: porte diverse non contano
https://www.example.com:443 Schemeless same-site: corrispondenza esatta
https://www.example.com Schemeless same-site: le porte non contano

Come controllare se una richiesta è "same-site", "same-origin" o "cross-site"

Supporto dei browser

  • 76
  • 79
  • 90
  • 16.4

Origine

Tutti i browser moderni inviano richieste con un'intestazione HTTP Sec-Fetch-Site. L'intestazione contiene uno dei seguenti valori:

  • cross-site
  • same-site (si riferisce allo stesso sito con schemi)
  • same-origin
  • none

Puoi esaminare il valore di Sec-Fetch-Site per determinare se la richiesta è dello stesso sito, della stessa origine o cross-site.

Puoi ragionevolmente fidarti del valore dell'intestazione Sec-Fetch-Site perché: