Terminy „ta sama witryna” i „ta sama witryna” są często przywoływane, ale często są niewłaściwie rozumiane. Są używane np. w kontekście przechodzenia między stronami, żądań fetch()
, plików cookie, otwierania wyskakujących okienek, umieszczonych zasobów i elementów iframe. Z tej strony dowiesz się, czym są i czym różnią się od siebie.
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 o tej samej kombinacji schematu, nazwy hosta i portu są uznawane za witryny o tej samej domenie pochodzenia. Wszystkie inne są uznawane za „między domenami”.
Punkt początkowy A | Punkt początkowy B | „Same-origin” czy „cross-origin”? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | Różne domeny: różne domeny |
https://example.com:443 | Różne domeny: różne subdomeny | |
https://logowanie.example.com:443 | Różne domeny: różne subdomeny | |
http://www.example.com:443 | Różne domeny: różne schematy | |
https://www.example.com:80 | Różne domeny: różne porty | |
https://www.example.com:443 | Ta sama pochodzenie: dopasowanie ścisłe | |
https://www.example.com | Same-origin: niejawny numer portu (443) |
Witryna
Domeny najwyższego poziomu (TLD), takie jak .com
i .org
, są wymienione w bazie danych strefy głównej. W poprzednim
przykładzie „witryna” jest kombinacją schematu, domeny TLD i części występującej tuż przed nią (nazywamy ją TLD + 1). Na przykład w przypadku adresu URL https://www.example.com:443/foo
„witryna” to https://example.com
.
Lista domen publicznych i eTLD
W przypadku domen z elementami takimi jak .co.jp
czy .github.io
samo użycie właściwości .jp
lub .io
nie wystarczy, aby zidentyfikować „witrynę”. Nie można algorytmicznie określić poziomu domen, które można zarejestrować w przypadku danej domeny najwyższego poziomu.
Aby ułatwić Ci to zadanie, lista domen publicznych tworzy listę domen publicznych, nazywanych też efektywnymi domenami najwyższego poziomu (eTLD). Lista domen eTLD znajduje się na stronie 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 | „W tej samej witrynie” czy „w innej witrynie”? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | W wielu witrynach: różne domeny |
https://logowanie.example.com:443 | Ta sama witryna: różne subdomeny nie mają znaczenia | |
http://www.example.com:443 | W innych witrynach: różne schematy | |
https://www.example.com:80 | Ta sama witryna: różne porty nie mają znaczenia | |
https://www.example.com:443 | Ta sama witryna: dopasowanie ścisłe | |
https://www.example.com | Ta sama witryna: porty nie mają znaczenia |
„Bez schematu”
Definicja „tej samej witryny” została zmieniona tak, aby uwzględnić 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ą uznawane 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 | „Bez schematu w tej samej witrynie” czy „w innej witrynie”? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | W wielu witrynach: różne domeny |
https://logowanie.example.com:443 | Bez schematów w tej samej witrynie: 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 | Bez schematów w tej samej witrynie: różne porty nie mają znaczenia | |
https://www.example.com:443 | Bez schematów w tej samej witrynie: dopasowanie ścisłe | |
https://www.example.com | Bez schematów w samej witrynie: porty nie mają znaczenia |
Jak sprawdzić, czy żądanie jest typu „ta sama witryna”, „ta sama witryna” czy „inna witryna”
Wszystkie nowoczesne przeglądarki wysyłają żądania za pomocą nagłówka HTTP Sec-Fetch-Site
.
Nagłówek ma jedną z tych wartości:
cross-site
same-site
(odnosi się do schematu w tej samej witrynie)same-origin
none
Możesz sprawdzić wartość Sec-Fetch-Site
, aby określić, czy żądanie pochodzi z tej samej witryny, z tej samej domeny czy z innej witryny.
Wartości nagłówka Sec-Fetch-Site
można bez obaw ufać, ponieważ:
- Nagłówków HTTP zaczynających się od
Sec-
nie można zmieniać za pomocą JavaScriptu - Przeglądarka zawsze ustawia te nagłówki.