"Situs yang sama" dan "asal yang sama" adalah istilah yang sering dikutip, tetapi sering kali salah dipahami. Misalnya, cookie digunakan dalam konteks transisi halaman,
permintaan fetch()
, cookie, membuka pop-up, resource tersemat, dan
iframe. Halaman ini menjelaskan definisinya dan perbedaannya satu sama
lain.
Asal

"Origin" 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
.
"Sama asal" dan "lintas asal"
Situs yang memiliki kombinasi skema, nama host, dan port yang sama dianggap sebagai "origin yang sama". Semua yang lain dianggap "lintas-asal".
Origin A | Asal B | "Sama asal" atau "lintas asal"? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | Lintas-asal: domain yang berbeda |
https://example.com:443 | Lintas origin: subdomain yang berbeda | |
https://login.example.com:443 | Lintas origin: subdomain yang berbeda | |
http://www.example.com:443 | Lintas origin: skema yang berbeda | |
https://www.example.com:80 | Lintas origin: port yang berbeda | |
https://www.example.com:443 | Sama asal: pencocokan persis | |
https://www.example.com | Sama asal: kecocokan nomor port implisit (443) |
Situs

Domain level teratas (TLD) seperti
.com
dan .org
tercantum dalam
Database Zona Root. Pada contoh
sebelumnya, "situs" adalah kombinasi dari
skema,
TLD, dan bagian dari
domain tepat sebelum TLD (Kami menyebutnya TLD+1). Misalnya, dengan URL
https://www.example.com:443/foo
, "situs" adalah https://example.com
.
Daftar Suffix Publik dan eTLD
Untuk domain dengan elemen seperti .co.jp
atau .github.io
, hanya menggunakan .jp
atau
.io
tidak cukup spesifik untuk mengidentifikasi "situs". Tidak ada cara untuk
menentukan tingkat domain yang dapat didaftarkan secara algoritmis untuk TLD tertentu.
Untuk membantu hal tersebut, Daftar Suffix Publik
menentukan daftar suffix publik, yang juga disebut TLD efektif (eTLD). Daftar
eTLD dikelola 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-nya adalah .github.io
, dan eTLD+1-nya adalah project.github.io
, sehingga
https://project.github.io
dianggap sebagai "situs" untuk URL ini.

"dalam situs" dan "lintas situs"
Situs yang memiliki skema dan eTLD+1 yang sama dianggap sebagai "situs yang sama". Situs yang memiliki skema atau eTLD+1 yang berbeda adalah "lintas situs".
Origin A | Asal B | "Dalam situs yang sama" atau "lintas situs"? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | Lintas situs: domain yang berbeda |
https://login.example.com:443 | Situs yang sama: subdomain yang berbeda tidak masalah | |
http://www.example.com:443 | Antarsitus: skema yang 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 | Dalam situs yang sama: port tidak berpengaruh |
"Situs yang sama tanpa skema"

Definisi "situs yang sama" diubah untuk menyertakan skema URL sebagai bagian dari situs untuk mencegah HTTP digunakan sebagai saluran yang lemah.
Konsep lama "situs yang sama" tanpa perbandingan skema kini 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 dipertimbangkan.
Origin A | Asal B | "Sama situs tanpa skema" atau "lintas situs"? |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | Lintas situs: domain yang berbeda |
https://login.example.com:443 | Situs yang sama tanpa skema: subdomain yang berbeda tidak masalah | |
http://www.example.com:443 | Same-site tanpa skema: skema yang berbeda tidak berpengaruh | |
https://www.example.com:80 | Situs yang sama tanpa skema: port yang berbeda tidak berpengaruh | |
https://www.example.com:443 | Situs yang sama tanpa skema: pencocokan persis | |
https://www.example.com | Same-site tanpa skema: port tidak berpengaruh |
Cara memeriksa apakah permintaan merupakan "situs yang sama", "origin yang sama", atau "lintas situs"
Semua browser modern mengirim permintaan dengan
header HTTP Sec-Fetch-Site
.
Header memiliki salah satu nilai berikut:
cross-site
same-site
(mengacu pada same-site dengan skema)same-origin
none
Anda dapat memeriksa nilai Sec-Fetch-Site
untuk menentukan apakah permintaan
adalah situs yang sama, origin yang sama, atau lintas situs.
Anda dapat memercayai nilai header Sec-Fetch-Site
secara wajar, karena:
- Header HTTP yang diawali dengan
Sec-
tidak dapat diubah oleh JavaScript - Browser selalu menetapkan judul ini.