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

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

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

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

"Cùng-origin" và "cross-origin"

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

Nguồn gốc A Nguồn gốc B "Cùng nguồn gốc" hay "nhiều nguồn gốc"?
https://www.example.com:443 https://www.evil.com:443 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: lược đồ khác nhau
https://www.example.com:80 Nhiều nguồn gốc: các cổng khác nhau
https://www.example.com:443 Cùng gốc: khớp chính xác
https://www.example.com Cùng gốc: số cổng ngầm (443) trùng khớp

Trang web

Trang web (TLD+1)
Các thành phần trên URL tạo nên một trang web.

Các 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, "trang web" là sự kế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 những 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 độ miền có thể đăng ký cho một TLD cụ thể theo thuật toán. Để giúp bạn làm việc này, Danh sách hậu tố công khai xác định một danh sách hậu tố công khai, còn gọi là TLD hiệu lực (eTLD). Danh sách eTLD hiện có tại publicsuffix.org/list.

Để xác định phần "trang web" của một miền có chứa eTLD, hãy áp dụng phương pháp tương tự như ví dụ với .com. Lấy https://www.project.github.io:443/foo làm ví dụ, giao thứ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.

"same-site" và "cross-site"

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ó một lược đồ khác hoặc một eTLD+1 khác là "nhiều trang web".

Nguồn gốc A Nguồn gốc B "Cùng trang web" hay "nhiều trang web"?
https://www.example.com:443 https://www.evil.com:443 Nhiều trang web: các tên 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: các lược đồ khác nhau
https://www.example.com:80 Cùng trang web: các cổng khác nhau không quan trọng
https://www.example.com:443 Cùng trang web: khớp chính xác
https://www.example.com Cùng trang web: cổng không quan trọng

"Cùng trang web không lập trình"

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

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

Nguồn gốc A Nguồn gốc B "Cùng trang web không lập trình" hay "nhiều trang web"?
https://www.example.com:443 https://www.evil.com:443 Nhiều trang web: các tên miền khác nhau
https://login.example.com:443 Cùng một trang web không lập trình: các miền con khác nhau không quan trọng
http://www.example.com:443 Cùng một trang web không lập kế hoạch: các lược đồ khác nhau không quan trọng
https://www.example.com:80 Cùng một trang web không lập trình: khác nhau cổng không quan trọng
https://www.example.com:443 Cùng trang web không theo chương trình: khớp chính xác
https://www.example.com Cùng trang web không lập trình: 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"

Hỗ trợ trình duyệt

  • 76
  • 79
  • 90
  • 16,4

Nguồn

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

  • cross-site
  • same-site (đề cập đến cùng trang web có giao thứ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 một cách hợp lý vào giá trị của tiêu đề Sec-Fetch-Site, vì: