"situs yang sama" dan "origin yang sama" sering disebut, tetapi sering kali disalahpahami. Misalnya, keduanya disebutkan dalam konteks transisi halaman, permintaan fetch()
, cookie, pop-up pembuka, resource tersemat, dan iframe.
Origin
"Asal" adalah kombinasi dari
skema
(juga dikenal sebagai
protokol, misalnya
HTTP atau
HTTPS),
nama host, dan
port
(jika ditentukan). Misalnya, dengan URL https://www.example.com:443/foo
, "origin" adalah https://www.example.com:443
.
"same-origin" dan "cross-origin"
Situs yang memiliki kombinasi skema, nama host, dan port yang sama dianggap "origin yang sama". Lainnya dianggap "lintas asal".
Asal A | Asal B | Penjelasan apakah Asal A dan B adalah "asal yang sama" atau "lintas asal" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | lintas asal: domain berbeda |
https://example.com:443 | lintas asal: subdomain berbeda | |
https://login.example.com:443 | lintas asal: subdomain berbeda | |
http://www.example.com:443 | lintas asal: skema berbeda | |
https://www.example.com:80 | lintas asal: port berbeda | |
https://www.example.com:443 | same-origin: pencocokan persis | |
https://www.example.com | same-origin: implicit port number (443) cocok |
Situs
Domain level teratas (TLD) seperti .com
dan .org
tercantum dalam Database Zona Root. Pada contoh di atas, "situs" adalah kombinasi dari skema, TLD, dan bagian dari domain tepat sebelumnya (Kita menyebutnya TLD+1). Misalnya, dengan URL
https://www.example.com:443/foo
, "situs" adalah https://example.com
.
Daftar Akhiran Publik dan eTLD
Untuk domain yang menyertakan hal-hal seperti .co.jp
atau .github.io
, hanya penggunaan .jp
atau .io
tidak cukup terperinci untuk mengidentifikasi "situs". Tidak ada cara algoritma untuk menentukan tingkat domain yang dapat didaftarkan untuk TLD tertentu.
Itulah sebabnya daftar akhiran publik yang ditentukan dalam Daftar Suffix Publik dibuat. Akhiran publik ini juga disebut TLD yang efektif (eTLD). Daftar eTLD
dipertahankan di publicsuffix.org/list.
Untuk mengidentifikasi bagian "situs" dari domain yang menyertakan eTLD, terapkan praktik yang sama seperti contoh dengan .com
. Dengan mengambil
https://www.project.github.io:443/foo
sebagai contoh, skemanya adalah https
,
eTLD adalah .github.io
, dan eTLD+1 adalah project.github.io
, sehingga
https://project.github.io
dianggap sebagai "situs" untuk URL ini.
"situs yang sama" dan "lintas situs"
Situs yang memiliki skema dan eTLD+1 yang sama dianggap "situs yang sama". Situs yang memiliki skema berbeda atau eTLD+1 yang berbeda adalah "lintas situs".
Asal A | Asal B | Penjelasan apakah Asal A dan B adalah "situs yang sama" atau "lintas situs" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | lintas situs: domain berbeda |
https://login.example.com:443 | situs yang sama: subdomain yang berbeda tidak berpengaruh | |
http://www.example.com:443 | lintas situs: skema berbeda | |
https://www.example.com:80 | situs yang sama: port yang berbeda tidak berpengaruh | |
https://www.example.com:443 | situs yang sama: pencocokan persis | |
https://www.example.com | situs yang sama: port tidak berpengaruh |
"situs yang sama tanpa skema"
Definisi "situs yang sama" berkembang sehingga menganggap skema URL sebagai bagian dari
situs untuk mencegah HTTP digunakan sebagai saluran
lemah.
Konsep lama "situs yang sama" tanpa perbandingan skema sekarang disebut "situs yang sama tanpa skema". Misalnya, http://www.example.com
dan https://www.example.com
dianggap sebagai situs yang sama tanpa skema, tetapi bukan situs yang sama, karena hanya bagian eTLD+1 yang penting dan skema tidak diperhitungkan.
Asal A | Asal B | Penjelasan apakah Asal A dan B merupakan "situs yang sama tanpa skema" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | lintas situs: domain berbeda |
https://login.example.com:443 | situs yang sama tanpa skema: subdomain yang berbeda tidak berpengaruh | |
http://www.example.com:443 | situs yang sama tanpa skema: skema yang berbeda tidaklah penting | |
https://www.example.com:80 | situs yang sama tanpa skema: port yang berbeda tidak masalah | |
https://www.example.com:443 | situs yang sama tanpa skema: pencocokan persis | |
https://www.example.com | situs yang sama tanpa skema: port tidak berpengaruh |
Cara memeriksa apakah permintaan merupakan "situs yang sama", "origin yang sama", atau "lintas situs"
Semua browser modern (Safari mendukung segera
landing) mengirim permintaan bersama
header HTTP
Sec-Fetch-Site
. Header memiliki salah satu nilai berikut:
cross-site
same-site
same-origin
none
Dengan memeriksa nilai Sec-Fetch-Site
, Anda dapat menentukan apakah permintaan merupakan "situs yang sama", "origin yang sama", atau "lintas situs".