"cùng trang web" và "cùng nguồn gốc"

"Cùng trang web" và "cùng nguồn gốc" là các thuật ngữ thường được trích dẫn nhưng thường bị hiểu sai. Ví dụ: các cookie này được dùng trong ngữ cảnh chuyển đổi trang, yêu cầu fetch(), cookie, mở cửa sổ bật lên, tài nguyên được nhúng và iframe. Trang này giải thích về các loại tệp này và sự khác biệt giữa các loại tệp.

Điểm gốc

Điểm gốc
Cấu trúc của một nguồn gốc.

"Nguồn gốc" là tổ hợp của một giao thức (còn gọi là giao thức, ví dụ: HTTP hoặc HTTPS), một tên máy chủ và một cổng (nếu được chỉ định). Ví dụ: với URL là https://www.example.com:443/foo, "nguồn gốc" là https://www.example.com:443.

"Cùng nguồn gốc" và "khác nguồn gốc"

Những trang web có cùng tổ hợp lược đồ, tên máy chủ và cổng được coi là "có cùng nguồn gốc". Mọi nội dung khác đều được coi là "nhiều nguồn gốc".

Nguồn gốc A Nguồn gốc B "Cùng nguồn gốc" hay "khác nguồn gốc"?
https://www.example.com:443 https://www.evil.com:443 Trên nhiều nguồn gốc: các miền khác nhau
https://example.com:443 Nhiều nguồn gốc: các miền con khác nhau
https://login.example.com:443 Nhiều nguồn gốc: các miền con khác nhau
http://www.example.com:443 Nhiều nguồn gốc: nhiều lược đồ
https://www.vidu.com:80 Nhiều nguồn gốc: nhiều cổng
https://www.vidu.com:443 Cùng nguồn gốc: kiểu khớp chính xác
https://www.vidu.com Cùng nguồn gốc: số cổng ngầm ẩn (443) khớp

Trang web

Trang web (TLD+1)
Các phần của URL tạo nên một trang web.

Miền cấp cao nhất (TLD) như .com.org được liệt kê trong Cơ sở dữ liệu vùng gốc. Trong ví dụ
trước, "site" là tổ hợp của lược đồ, TLD và một phần của miền ngay trước đó (Chúng tôi gọi là TLD+1). Ví dụ: với URL là https://www.example.com:443/foo, "trang web" sẽ là https://example.com.

Danh sách hậu tố công khai và eTLD

Đối với các miền có các phần tử như .co.jp hoặc .github.io, việc chỉ sử dụng .jp hoặc .io là chưa đủ cụ thể để xác định "trang web". Không có cách nào để xác định cấp độ của các miền có thể đăng ký cho một TLD cụ thể theo thuật toán. Để giúp giải quyết vấn đề đó, Danh sách hậu tố công khai xác định danh sách các hậu tố công khai, còn gọi là TLD hiệu quả (eTLD). Danh sách eTLD được duy trì tại publicsuffix.org/list.

Để xác định phần "site" (trang web) của một miền có chứa eTLD, hãy áp dụng cùng một phương pháp như ví dụ với .com. Lấy https://www.project.github.io:443/foo làm ví dụ, lược đồ là https, eTLD là .github.io và eTLD+1 là project.github.io, vì vậy, https://project.github.io được coi là "trang web" cho URL này.

Trang web (eTLD+1)
Các phần của URL có eTLD.

"cùng trang web" và "khác trang web"

Các trang web có cùng lược đồ và cùng eTLD+1 được coi là "cùng trang web". Các trang web có lược đồ hoặc eTLD+1 khác nhau là "trên nhiều trang web".

Nguồn gốc A Nguồn gốc B "Cùng trang web" hay "khác trang web"?
https://www.example.com:443 https://www.evil.com:443 Trên nhiều trang web: các miền khác nhau
https://login.example.com:443 Cùng trang web: các miền con khác nhau không quan trọng
http://www.example.com:443 Trên nhiều trang web: nhiều lược đồ
https://www.vidu.com:80 Cùng trang web: các cổng khác nhau không quan trọng
https://www.vidu.com:443 Cùng trang web: kiểu khớp chính xác
https://www.vidu.com Cùng trang web: cổng không quan trọng

"Cùng trang web không có giao thức"

cùng trang web không có lược đồ

Định nghĩa về "cùng trang web" đã thay đổi để đưa lược đồ URL vào trang web nhằm ngăn việc sử dụng HTTP làm kênh yếu. Khái niệm cũ về "cùng trang web" mà không so sánh giao thức hiện được gọi là "cùng trang web không có giao thức". Ví dụ: http://www.example.comhttps://www.example.com được coi là cùng một trang web không có giao thức nhưng không phải là cùng một trang web, vì chỉ phần eTLD+1 mới quan trọng và giao thức không được xem xét.

Nguồn gốc A Nguồn gốc B "Cùng trang web không có giao thức" hay "trên nhiều trang web"?
https://www.example.com:443 https://www.evil.com:443 Trên nhiều trang web: các miền khác nhau
https://login.example.com:443 Cùng trang web không có giao thức: các miền con khác nhau không quan trọng
http://www.example.com:443 Same-site không có lược đồ: các lược đồ khác nhau không quan trọng
https://www.vidu.com:80 Cùng trang web không có giao thức: các cổng khác nhau không quan trọng
https://www.vidu.com:443 Cùng trang web không có giao thức: khớp chính xác
https://www.vidu.com Same-Site không có lược đồ: cổng không quan trọng

Cách kiểm tra xem một yêu cầu là "same-site", "same-origin" hay "cross-site"

Browser Support

  • Chrome: 76.
  • Edge: 79.
  • Firefox: 90.
  • Safari: 16.4.

Source

Tất cả trình duyệt hiện đại đều gửi yêu cầu bằng tiêu đề HTTP Sec-Fetch-Site. Tiêu đề có một trong các giá trị sau:

  • cross-site
  • same-site (tham chiếu đến cùng một trang web có lược đồ)
  • same-origin
  • none

Bạn có thể kiểm tra giá trị của Sec-Fetch-Site để xác định xem yêu cầu là cùng trang web, cùng nguồn gốc hay trên nhiều trang web.

Bạn có thể tin tưởng giá trị của tiêu đề Sec-Fetch-Site một cách hợp lý vì: