มักกล่าวถึงคำว่า "เว็บไซต์เดียวกัน" และ "ต้นทางเดียวกัน" แต่มักทำให้เข้าใจผิด เช่น มีการใช้ในบริบทของการเปลี่ยนหน้า, คำขอ 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) เช่น .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 เดียวกันถือเป็น "เว็บไซต์เดียวกัน" เว็บไซต์ที่มีรูปแบบแตกต่างกันหรือมี 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 | ใช้เว็บไซต์เดียวกันได้อย่างง่ายดาย: พอร์ตไม่สำคัญ |
วิธีตรวจสอบว่าคําขอเป็นแบบ "เว็บไซต์เดียวกัน" "ต้นทางเดียวกัน" หรือ "ข้ามเว็บไซต์"
เบราว์เซอร์รุ่นใหม่ทั้งหมดจะส่งคำขอที่มีส่วนหัว HTTP Sec-Fetch-Site
ส่วนหัวมีค่าใดค่าหนึ่งต่อไปนี้
cross-site
same-site
(หมายถึงเว็บไซต์เดียวกันที่มีรูปแบบ)same-origin
none
คุณตรวจสอบค่าของ Sec-Fetch-Site
ได้เพื่อดูว่าคําขอเป็นแบบเว็บไซต์เดียวกัน ต้นทางเดียวกัน หรือแบบข้ามเว็บไซต์
คุณเชื่อถือค่าของส่วนหัว Sec-Fetch-Site
ได้เนื่องด้วยเหตุผลต่อไปนี้
- JavaScript จะแก้ไขส่วนหัว HTTP ที่ขึ้นต้นด้วย
Sec-
ไม่ได้ - โดยเบราว์เซอร์จะตั้งค่าส่วนหัวเหล่านี้เสมอ