Hasła „ta sama-witryna” i „ta sama strona” są często przywoływane, ale często są niewłaściwie rozumiane. Wspomniane są na przykład w kontekście przechodzenia między stronami, żądań fetch()
, plików cookie, otwierania wyskakujących okienek, umieszczonych zasobów i elementów iframe.
Punkt początkowy
„Źródło” to kombinacja schematu (nazywanego też protokołem, np. HTTP lub HTTPS), nazwą hosta i portem (jeśli został określony). Na przykład w przypadku adresu URL https://www.example.com:443/foo
wartością „origin” jest https://www.example.com:443
.
„same-origin” i „cross-origin”;
Witryny, które korzystają z tego samego schematu, nazwy hosta i portu, są uważane za witryny o tej samej domenie. Wszystkie inne są uznawane za „między domenami”.
Punkt początkowy A | Punkt początkowy B | Wyjaśnienie, czy źródło A i B są „z tej samej domeny” czy „z innej domeny” |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | cross-origin: różne domeny |
https://example.com:443 | cross-origin: różne subdomeny | |
https://logowanie.example.com:443 | cross-origin: różne subdomeny | |
http://www.example.com:443 | cross-origin: różne schematy | |
https://www.example.com:80 | cross-origin: różne porty | |
https://www.example.com:443 | same-origin: dopasowanie ścisłe | |
https://www.example.com | same-origin: niejawny numer portu (443) |
Witryna
Domeny najwyższego poziomu (TLD), takie jak .com
i .org
, znajdują się w bazie danych strefy głównej. W powyższym przykładzie „site” to połączenie schematu, domeny TLD i części znajdującej się tuż przed nią (nazywamy ją TLD + 1). Na przykład w przypadku adresu URL https://www.example.com:443/foo
adres „witryna” to https://example.com
.
Lista domen publicznych i eTLD
W przypadku domen zawierających takie elementy jak .co.jp
czy .github.io
samo użycie właściwości .jp
lub .io
nie jest wystarczająco szczegółowe, aby można było zidentyfikować „witrynę”. Nie ma sposobu, aby algorytmicznie określić poziom domen, które można zarejestrować w przypadku danej domeny najwyższego poziomu.
W związku z tym utworzono listę sufiksów publicznych zdefiniowanych na liście domen publicznych. Takie domeny publiczne są też nazywane skutecznymi domenami najwyższego poziomu (eTLD). Lista domen eTLD znajduje się pod adresem publicsuffix.org/list.
Aby zidentyfikować część „witryna” domeny, która zawiera eTLD, zastosuj tę samą procedurę co w przykładzie z operatorem .com
. Jeśli chodzi o przykład, schemat https://www.project.github.io:443/foo
to https
, eTLD to .github.io
, a eTLD+1 to project.github.io
, więc https://project.github.io
jest uważany za „witrynę” w przypadku tego adresu URL.
„ta sama witryna” i „inna witryna”
Witryny o tym samym schemacie i takim samym poziomie eTLD + 1 są uznawane za „tę samą witrynę”. Witryny o innym schemacie lub o odmiennej domenie eTLD + 1 są uznawane za „między witrynami”.
Punkt początkowy A | Punkt początkowy B | wyjaśnienie, czy punkty początkowe A i B są „w tej samej witrynie” czy „w innej witrynie”. |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | cross-site: różne domeny |
https://logowanie.example.com:443 | same-site: różne subdomeny nie mają znaczenia | |
http://www.example.com:443 | cross-site: różne schematy | |
https://www.example.com:80 | same-site: różne porty nie mają znaczenia | |
https://www.example.com:443 | same-site: dopasowanie ścisłe | |
https://www.example.com | same-site: porty nie mają znaczenia |
„bez schematu” w tej samej witrynie
Definicja „tej samej witryny” ewoluowała, aby uwzględniać schemat adresu URL jako część witryny, aby zapobiec wykorzystaniu protokołu HTTP jako słabego kanału.
Starsza koncepcja „tej samej witryny” bez porównania schematów nosi teraz nazwę „bezschematowa liczba stron w tej samej witrynie”. Na przykład http://www.example.com
i https://www.example.com
są uważane za bez schematu w tej samej witrynie, ale nie w tej samej witrynie, ponieważ znaczenie ma tylko część eTLD + 1, a schemat nie jest brany pod uwagę.
Punkt początkowy A | Punkt początkowy B | Wyjaśnienie, czy punkt początkowy A i B jest „bez schematu” w tej samej witrynie |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | cross-site: różne domeny |
https://logowanie.example.com:443 | schemeless-same-site: różne subdomeny nie mają znaczenia | |
http://www.example.com:443 | bez schematów w tej samej witrynie: różne schematy nie mają znaczenia | |
https://www.example.com:80 | bezproblemowe działanie w tej samej witrynie: różne porty nie mają znaczenia | |
https://www.example.com:443 | schemeless-same-site: dopasowanie ścisłe | |
https://www.example.com | schemeless-same-site: porty nie mają znaczenia |
Jak sprawdzić, czy żądanie jest typu „ta sama witryna”, „ta sama witryna” czy „inna witryna”
Wszystkie nowoczesne przeglądarki (Safari obsługują wkrótce stronę docelową) wysyłają żądania wraz z nagłówkiem HTTP Sec-Fetch-Site
. Nagłówek ma jedną z tych wartości:
cross-site
same-site
same-origin
none
Analizując wartość Sec-Fetch-Site
, możesz określić, czy żądanie dotyczy tej samej witryny, tej samej domeny czy innych witryn.