"ไซต์เดียวกัน" และ "ต้นทางเดียวกัน"

"เว็บไซต์เดียวกัน" และ "ต้นทางเดียวกัน" เป็นคําที่มักมีการอ้างอิงแต่มักทําความเข้าใจผิด เช่น ใช้กับบริบทของการเปลี่ยนหน้าเว็บ fetch()คำขอ คุกกี้ ป๊อปอัปที่เปิดอยู่ ทรัพยากรที่ฝัง และ iframe หน้านี้จะอธิบายความหมายของฟีเจอร์เหล่านี้และความแตกต่างระหว่างฟีเจอร์แต่ละรายการ

Origin

Origin
โครงสร้างของต้นทาง

"ต้นทาง" คือชุดค่าผสมของรูปแบบ (หรือที่เรียกว่าโปรโตคอล เช่น HTTP หรือ HTTPS) ชื่อโฮสต์ และพอร์ต (หากระบุ) เช่น เมื่อให้ URL ของ https://www.example.com:443/foo https://www.example.com:443 จะเป็น "ต้นทาง"

"ต้นทางเดียวกัน" และ "ข้ามต้นทาง"

ระบบจะถือว่าเว็บไซต์ที่มีรูปแบบ ชื่อโฮสต์ และพอร์ตเหมือนกันเป็น "ต้นทางเดียวกัน" ส่วนรายการอื่นๆ ทั้งหมดจะถือว่า "ข้ามแหล่งที่มา"

ต้นทาง A ต้นทาง ข "ต้นทางเดียวกัน" หรือ "ข้ามต้นทาง"
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+1)
ส่วนต่างๆ ของ URL ที่ประกอบกันเป็นเว็บไซต์

โดเมนระดับบนสุด (TLD) เช่น .com และ .org จะแสดงอยู่ในฐานข้อมูลโซนราก ใน
ตัวอย่าง
ก่อนหน้า "site" คือชุดค่าผสมของรูปแบบ 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

หากต้องการระบุส่วน "site" ของโดเมนที่มี 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)
ส่วนของ URL ที่มี eTLD

"ในเว็บไซต์เดียวกัน" และ "ข้ามเว็บไซต์"

ระบบจะถือว่าเว็บไซต์ที่มีรูปแบบและ eTLD+1 เดียวกันเป็น "เว็บไซต์เดียวกัน" เว็บไซต์ที่มีรูปแบบหรือ eTLD+1 ต่างกันจะถือว่า "ข้ามเว็บไซต์"

ต้นทาง A ต้นทาง ข "ในเว็บไซต์เดียวกัน" หรือ "ข้ามเว็บไซต์"
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 ในเว็บไซต์เดียวกัน: พอร์ตไม่สำคัญ

"ไซต์เดียวกันแบบไม่มีรูปแบบ"

Same-Site ที่ไม่มีรูปแบบ

คำจำกัดความของ "เว็บไซต์เดียวกัน" เปลี่ยนให้รวมรูปแบบ URL เป็นส่วนหนึ่งของเว็บไซต์เพื่อป้องกันไม่ให้มีการใช้ HTTP เป็นช่องทางที่เปราะบาง แนวคิดเดิมของ "ในเว็บไซต์เดียวกัน" ที่ไม่มีรูปแบบการเปรียบเทียบจะเปลี่ยนเป็น "ในเว็บไซต์เดียวกันแบบไม่มีรูปแบบ" เช่น http://www.example.com และ https://www.example.com จะถือว่าอยู่ในเว็บไซต์เดียวกันแบบไม่มีรูปแบบ แต่ไม่ใช่เว็บไซต์เดียวกัน เนื่องจากมีเพียงส่วน eTLD+1 เท่านั้นที่มีความสำคัญ และระบบจะไม่พิจารณารูปแบบ

ต้นทาง A ต้นทาง ข "ในเว็บไซต์เดียวกันแบบไม่มีรูปแบบ" หรือ "ข้ามเว็บไซต์"
https://www.example.com:443 https://www.evil.com:443 ข้ามเว็บไซต์: โดเมนอื่น
https://login.example.com:443 เว็บไซต์เดียวกันแบบไม่มีรูปแบบ: โดเมนย่อยที่แตกต่างกันไม่สำคัญ
http://www.example.com:443 Same-Site ที่ไม่มีรูปแบบ: รูปแบบที่แตกต่างกันไม่สำคัญ
https://www.example.com:80 เว็บไซต์เดียวกันแบบไม่มีรูปแบบ: พอร์ตที่แตกต่างกันไม่สำคัญ
https://www.example.com:443 เว็บไซต์เดียวกันแบบไม่มีรูปแบบ: การทํางานแบบตรงทั้งหมด
https://www.example.com Same-Site ที่ไม่มีรูปแบบ: พอร์ตไม่สำคัญ

วิธีตรวจสอบว่าคําขอเป็น "เว็บไซต์เดียวกัน" "ต้นทางเดียวกัน" หรือ "ข้ามเว็บไซต์"

Browser Support

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

Source

เบราว์เซอร์สมัยใหม่ทั้งหมดจะส่งคำขอที่มีส่วนหัว HTTP Sec-Fetch-Site ส่วนหัวมีค่าใดค่าหนึ่งต่อไปนี้

  • cross-site
  • same-site (หมายถึง Same-Site ที่มีรูปแบบ)
  • same-origin
  • none

คุณสามารถตรวจสอบค่าของ Sec-Fetch-Site เพื่อดูว่าคำขอนั้นมาจากเว็บไซต์เดียวกัน ต้นทางเดียวกัน หรือข้ามเว็บไซต์

คุณวางใจค่าของส่วนหัว Sec-Fetch-Site ได้เนื่องจากเหตุผลต่อไปนี้