มักกล่าวถึงคำว่า "เว็บไซต์เดียวกัน" และ "แหล่งเดียวกัน" แต่มักทำให้เข้าใจผิด เช่น มีการกล่าวถึงในบริบทของการเปลี่ยนหน้าเว็บ, คำขอ fetch()
, คุกกี้, การเปิดป๊อปอัป, ทรัพยากรที่ฝัง และ iframe
Origin
"Origin" เป็นชุดค่าผสมของรูปแบบ (หรือที่เรียกว่าโปรโตคอล เช่น HTTP หรือ HTTPS), ชื่อโฮสต์ และพอร์ต (หากระบุ) ตัวอย่างเช่น ระบุ URL เป็น https://www.example.com:443/foo
"ต้นทาง" คือ https://www.example.com:443
"ต้นทางเดียวกัน" และ "ข้ามต้นทาง"
เว็บไซต์ที่มีชุดรูปแบบ ชื่อโฮสต์ และพอร์ตเดียวกันจะถือว่ามีต้นทางเดียวกัน อื่นๆ ทั้งหมดจะถือว่าเป็นแบบ "ข้ามต้นทาง"
ต้นทาง A | ต้นทาง B | คำอธิบายว่าต้นทาง A และ B เป็น "ต้นทางเดียวกัน" หรือ "ข้ามต้นทาง" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | ข้ามต้นทาง: โดเมนต่างกัน |
https://example.com:443 | ข้ามต้นทาง: โดเมนย่อยที่ต่างกัน | |
https://login.example.com:443 | ข้ามต้นทาง: โดเมนย่อยที่ต่างกัน | |
http://www.example.com:443 | ข้ามต้นทาง: สคีมต่างกัน | |
https://www.example.com:80 | ข้ามต้นทาง: พอร์ตต่างกัน | |
https://www.example.com:443 | ต้นทางเดียวกัน: การทำงานแบบตรงทั้งหมด | |
https://www.example.com | ต้นทางเดียวกัน: ตรงกับหมายเลขพอร์ตโดยนัย (443) |
ไซต์
โดเมนระดับบนสุด (TLD) เช่น .com
และ .org
จะแสดงอยู่ในฐานข้อมูลโซนราก ในตัวอย่างด้านบน "site" เป็นการรวม scheme, TLD และส่วนของโดเมนที่อยู่ก่อนหน้า (เราเรียกว่า TLD+1) ตัวอย่างเช่น ใน URL คือ https://www.example.com:443/foo
"เว็บไซต์" คือ https://example.com
รายการคำต่อท้ายสาธารณะและ eTLD
สำหรับโดเมนที่มีสิ่งต่างๆ เช่น .co.jp
หรือ .github.io
การใช้ .jp
หรือ .io
เพียงอย่างเดียวไม่ละเอียดพอที่จะระบุ "เว็บไซต์" ไม่มีวิธีกำหนดระดับโดเมนที่จดทะเบียนได้สำหรับ TLD หนึ่งๆ ตามหลักอัลกอริทึม
ด้วยเหตุนี้จึงมีการสร้างรายการคำต่อท้ายสาธารณะที่กำหนดไว้ในรายการคำต่อท้ายสาธารณะ ส่วนต่อท้ายเหล่านี้เรียกอีกอย่างว่า TLD ที่มีประสิทธิภาพ (eTLD) รายการ eTLD เก็บไว้ที่ publicsuffix.org/list
หากต้องการระบุส่วน "เว็บไซต์" ของโดเมนที่มี eTLD ให้ใช้แนวทางปฏิบัติเดียวกันกับตัวอย่างที่มี .com
ดูตัวอย่างจาก https://www.project.github.io:443/foo
ว่ารูปแบบคือ https
ส่วน eTLD คือ .github.io
และ eTLD+1 คือ project.github.io
ดังนั้น https://project.github.io
จึงถือว่าเป็น "เว็บไซต์" สำหรับ URL นี้
แบบ "ไซต์เดียวกัน" และ "ข้ามเว็บไซต์"
เว็บไซต์ที่มีรูปแบบเดียวกันและ eTLD+1 เดียวกันถือเป็น "เว็บไซต์เดียวกัน" เว็บไซต์ที่มีรูปแบบแตกต่างกันหรือมี eTLD+1 ที่ต่างกันเป็นแบบ "ข้ามเว็บไซต์"
ต้นทาง A | ต้นทาง B | คำอธิบายว่าต้นทาง A และ B เป็น "เว็บไซต์เดียวกัน" หรือ "ข้ามเว็บไซต์" |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | ข้ามเว็บไซต์: โดเมนต่างกัน |
https://login.example.com:443 | เว็บไซต์เดียวกัน: โดเมนย่อยต่างกันไม่สำคัญ | |
http://www.example.com:443 | ข้ามเว็บไซต์: กลอุบายที่แตกต่างกัน | |
https://www.example.com:80 | เว็บไซต์เดียวกัน: พอร์ตต่างกันก็ไม่สำคัญ | |
https://www.example.com:443 | เว็บไซต์เดียวกัน: การทำงานแบบตรงทั้งหมด | |
https://www.example.com | เว็บไซต์เดียวกัน: พอร์ตไม่สำคัญ |
"เว็บไซต์เดียวกันที่ไม่มีรูปแบบ"
คําจํากัดความของ "เว็บไซต์เดียวกัน" พัฒนาให้พิจารณารูปแบบ URL เป็นส่วนหนึ่งของเว็บไซต์เพื่อป้องกันไม่ให้มีการใช้ HTTP เป็นแชแนลที่ไม่รัดกุม
แนวคิดเดิมของ "เว็บไซต์เดียวกัน" โดยไม่มีการเปรียบเทียบรูปแบบ ตอนนี้เรียกว่า "เว็บไซต์เดียวกันที่ไม่มีรูปแบบ" เช่น http://www.example.com
และ https://www.example.com
ถือเป็นเว็บไซต์เดียวกันที่ไม่มีรูปแบบ แต่ไม่ใช่เว็บไซต์เดียวกัน เพราะมีเพียงส่วน eTLD+1 เท่านั้นที่สำคัญ และไม่พิจารณารูปแบบดังกล่าว
ต้นทาง A | ต้นทาง B | คำอธิบายว่าต้นทาง A และ B เป็น "เว็บไซต์เดียวกันที่ไม่มีรูปแบบ" หรือไม่ |
---|---|---|
https://www.example.com:443 | https://www.evil.com:443 | ข้ามเว็บไซต์: โดเมนต่างกัน |
https://login.example.com:443 | เว็บไซต์เดียวกันไม่มีแผน: โดเมนย่อยต่างกันไม่สำคัญ | |
http://www.example.com:443 | เว็บไซต์เดียวกันไม่มีแบบแผน: แผนการที่ต่างกันไม่สำคัญ | |
https://www.example.com:80 | เว็บไซต์เดียวกันไม่มีแบบแผน: พอร์ตต่างกันก็ไม่สำคัญ | |
https://www.example.com:443 | เว็บไซต์เดียวกันที่ไม่มีรูปแบบ: การทำงานแบบตรงทั้งหมด | |
https://www.example.com | เว็บไซต์เดียวกันไม่มีแผน: พอร์ตไม่สำคัญ |
วิธีตรวจสอบว่าคําขอเป็นแบบ "เว็บไซต์เดียวกัน" "ต้นทางเดียวกัน" หรือ "ข้ามเว็บไซต์"
เบราว์เซอร์ที่ทันสมัยทั้งหมด (Safari รองรับ landing
เร็วๆ นี้) จะส่งคำขอพร้อมส่วนหัว HTTP Sec-Fetch-Site
ส่วนหัวมีค่าใดค่าหนึ่งต่อไปนี้
cross-site
same-site
same-origin
none
การตรวจสอบค่าของ Sec-Fetch-Site
ช่วยให้คุณระบุได้ว่าคําขอเป็น "เว็บไซต์เดียวกัน" "ต้นทางเดียวกัน" หรือ "ข้ามเว็บไซต์"