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

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

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

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

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

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

ต้นทาง 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+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

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

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

การสนับสนุนเบราว์เซอร์

  • 76
  • 79
  • 90
  • 16.4

แหล่งที่มา

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

  • cross-site
  • same-site (หมายถึงเว็บไซต์เดียวกันที่มีรูปแบบ)
  • same-origin
  • none

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

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