ส่วนหัวการตอบกลับ HTTP แบบใหม่เพื่อจำกัดการเขียนสคริปต์ทั่วทั้งโดเมนและขอแหล่งข้อมูลเฉพาะจากเบราว์เซอร์
Origin-Agent-Cluster
เป็นส่วนหัวการตอบกลับ HTTP ใหม่ที่บอกเบราว์เซอร์ให้ป้องกัน
การเข้าถึงแบบซิงโครนัสระหว่างหน้าข้ามต้นทางในเว็บไซต์เดียวกัน นอกจากนี้เบราว์เซอร์ยังอาจใช้
Origin-Agent-Cluster
เพื่อบอกเป็นนัยว่าต้นทางของคุณควรมีทรัพยากรของตนเองแยกต่างหาก เช่น
สำหรับกระบวนการเฉพาะ
ความเข้ากันได้กับเบราว์เซอร์
ปัจจุบันส่วนหัว Origin-Agent-Cluster
จะใช้งานใน Chrome 88 เป็นต้นไปเท่านั้น ออกแบบโดย
ร่วมมือกับตัวแทนจาก Mozilla Firefox อย่างใกล้ชิดและได้ทำเครื่องหมายว่ามูลค่า
การสร้างต้นแบบและมี
ผลบวกเบื้องต้น
ต้อนรับจาก
ของ WebKit ซึ่งเป็นเครื่องมือเบราว์เซอร์ที่ Safari ใช้
แต่ในระหว่างนี้ ไม่มีปัญหาในการทำให้ส่วนหัว Origin-Agent-Cluster
ใช้งานได้ในทุก
ผู้ใช้วันนี้ เบราว์เซอร์ที่ไม่เข้าใจก็จะไม่สนใจเบราว์เซอร์นั้น และเนื่องจากหน้าเว็บใน
คลัสเตอร์ Agent ที่ผูกกับต้นทางอาจทำสิ่งต่างๆ ได้น้อยกว่าคลัสเตอร์ที่ผูกกับเว็บไซต์ (
(ค่าเริ่มต้น) ไม่มีปัญหาเรื่องการทำงานร่วมกันที่ต้องกังวล
เหตุใดเบราว์เซอร์จึงแยกต้นทางของเว็บไซต์เดียวกันโดยอัตโนมัติไม่ได้
เว็บสร้างขึ้นจากนโยบายต้นทางเดียวกัน ซึ่งเป็นฟีเจอร์ความปลอดภัยที่
จำกัดวิธีที่เอกสารและสคริปต์สามารถโต้ตอบกับทรัพยากรจาก
origin ตัวอย่างเช่น หน้าเว็บที่โฮสต์ที่ https://a.example
อยู่ที่
ต้นทางต่างจากที่ https://b.example
หรือที่ https://sub.a.example
เบราว์เซอร์ใช้การแยกตัวจากต้นทางในรูปแบบที่ต่างกันไปในเบื้องหลัง ในเวอร์ชันเก่า แม้ว่าต้นทางแต่ละแห่งจะไม่สามารถเข้าถึงข้อมูลซึ่งกันและกันได้ แต่ต้นทางจะยังคง แชร์ทรัพยากร เช่น เทรดของระบบปฏิบัติการ กระบวนการ และการจัดสรรหน่วยความจำ ซึ่งหมายความว่าหาก แท็บหนึ่งทำงานช้า จะทำให้แท็บอื่นๆ ทั้งหมดทำงานช้าลง หรือหากแท็บหนึ่งใช้หน่วยความจำมากเกินไป จะทำให้เบราว์เซอร์ทั้งหมดขัดข้อง
ปัจจุบันเบราว์เซอร์ซับซ้อนขึ้น และพยายามแยกที่มาต่างๆ ออกเป็น กระบวนการ วิธีการทำงานจะแตกต่างกันไปในแต่ละเบราว์เซอร์: เบราว์เซอร์ส่วนใหญ่มีการแยกออกจากกันในระดับหนึ่ง ระหว่างแท็บต่างๆ แต่ iframe ที่ต่างกันภายในแท็บเดียวอาจใช้กระบวนการเดียวกัน และเนื่องจากกระบวนการ มาพร้อมกับโอเวอร์เฮดหน่วยความจำบางอย่าง พวกเขาจะใช้การเรียนรู้เพื่อหลีกเลี่ยงการเกิดหน่วยความจำมากเกินไป เช่น Firefox มีขีดจำกัดกระบวนการที่ผู้ใช้กำหนดค่าได้ และ Chrome ทำงานแตกต่างกันระหว่างเดสก์ท็อป (ที่มีหน่วยความจำมากกว่า) และมือถือ (ที่มีหน่วยความจำมากกว่า น้อย)
วิทยาการศึกษาสำนึกเหล่านี้ยังไม่สมบูรณ์แบบ และประสบข้อจำกัดสำคัญ เพราะ
ข้อยกเว้นสำหรับนโยบายต้นทางเดียวกันซึ่งอนุญาตโดเมนย่อย เช่น https://sub.a.example
และ
https://a.example
เพื่อสื่อสารกัน เบราว์เซอร์จะไม่สามารถแยกโดเมนย่อยจาก
ระหว่างกัน
ลักษณะการทำงานเริ่มต้นนี้เรียกว่า "คลัสเตอร์ Agent ที่ผูกกับเว็บไซต์" กล่าวคือ เบราว์เซอร์จะจัดกลุ่มหน้าเว็บตาม
ในเว็บไซต์ของตนเอง ส่วนหัว Origin-Agent-Cluster
ใหม่จะขอให้เบราว์เซอร์เปลี่ยนค่าเริ่มต้นนี้
สำหรับหน้าเว็บหนึ่งๆ วางหน้าเว็บลงในคลัสเตอร์ Agent ที่ผูกกับ ต้นทาง เพื่อให้มีการจัดกลุ่ม
เฉพาะกับหน้าอื่นๆ ที่มีที่มาเดียวกันเท่านั้น โดยเฉพาะอย่างยิ่ง หน้าเว็บแบบข้ามต้นทางในเว็บไซต์เดียวกัน
จะถูกยกเว้นจากคลัสเตอร์ Agent
การแยกการเลือกใช้นี้อนุญาตให้เบราว์เซอร์กำหนดคลัสเตอร์ Agent ใหม่ซึ่งผูกกับต้นทางเป็นของตัวเองได้
ทรัพยากรเฉพาะ ซึ่งไม่ได้รวมกับทรัพยากรจากต้นทางอื่นๆ ตัวอย่างเช่น หน้าดังกล่าว
อาจได้รับกระบวนการของตัวเอง หรือได้รับการตั้งเวลาในชุดข้อความแยกกัน โดยเพิ่ม
Origin-Agent-Cluster
ในหน้าเว็บของคุณ เป็นการบอกเบราว์เซอร์ว่าหน้าเว็บจะ
จากแหล่งข้อมูลเฉพาะด้านนี้
อย่างไรก็ตาม เพื่อดำเนินการแยกและรับสิทธิประโยชน์เหล่านี้ เบราว์เซอร์จำเป็นต้องปิดใช้ ฟีเจอร์เดิมบางอย่าง
สิ่งที่หน้าเว็บที่ผูกกับต้นทางทำไม่ได้
เมื่อหน้าอยู่ในคลัสเตอร์ Agent ที่ผูกกับต้นทาง คุณจะสูญเสียความสามารถในการพูดคุยกับเว็บไซต์เดียวกัน หน้าแบบข้ามต้นทางที่เคยใช้ได้ โดยเฉพาะอย่างยิ่งฟีเจอร์ต่อไปนี้
คุณไม่สามารถตั้งค่า
document.domain
นี่คือ ฟีเจอร์เก่าที่โดยปกติแล้วจะอนุญาตให้หน้าเว็บแบบข้ามต้นทางในเว็บไซต์เดียวกันเข้าถึงแต่ละหน้าได้แบบพร้อมกัน DOM ของผู้อื่น แต่ในคลัสเตอร์ Agent ที่ผูกกับต้นทาง จะมีการปิดใช้คุณไม่สามารถส่ง
WebAssembly.Module
ไปยังหน้าแบบข้ามต้นทางในเว็บไซต์เดียวกันผ่านpostMessage()
(เฉพาะ Chrome) คุณจะส่งไม่ได้อีกต่อไป
SharedArrayBuffer
หรือWebAssembly.Memory
ไปยังหน้าแบบข้ามต้นทางอื่นๆ ในเว็บไซต์เดียวกัน
กรณีที่ควรใช้คลัสเตอร์ Agent ที่ผูกกับต้นทาง
ต้นทางที่ได้รับประโยชน์สูงสุดจากส่วนหัว Origin-Agent-Cluster
คือต้นทางที่มีคุณสมบัติต่อไปนี้
ทำงานได้ดีที่สุดด้วยทรัพยากรของตนเองโดยเฉพาะเมื่อเป็นไปได้ ตัวอย่างเช่น เกมที่เน้นประสิทธิภาพ เว็บไซต์การประชุมทางวิดีโอ หรือแอปสร้างมัลติมีเดีย
มี iframe ที่ใช้ทรัพยากรจำนวนมากซึ่งมีต้นทางต่างกัน แต่เป็นเว็บไซต์เดียวกัน ตัวอย่างเช่น หาก
https://mail.example.com
ฝัง iframe, คีย์ต้นทางhttps://chat.example.com
รายการhttps://mail.example.com/
ทำให้มั่นใจได้ว่าโค้ดที่เขียนโดยทีมแชทจะไม่ มักรบกวนโค้ดที่เขียนโดยทีมอีเมล และอาจบอกใบ้ให้เบราว์เซอร์แยกโค้ด กระบวนการต่างๆ สามารถกำหนดเวลาได้อย่างอิสระและลดผลกระทบต่อประสิทธิภาพระหว่างกันคาดหวังให้ฝังตัวในหน้าเว็บไซต์เดียวกันที่มีต้นทางต่างกัน แต่จะต้องรู้ว่าตัวเองต้อง ใช้ทรัพยากรจำนวนมาก ตัวอย่างเช่น หาก
https://customerservicewidget.example.com
คาดว่าจะใช้ ทรัพยากรมากมายสำหรับวิดีโอแชท และจะฝังอยู่ในหลายต้นทางhttps://*.example.com
ทีมที่ดูแลวิดเจ็ตดังกล่าวสามารถใช้Origin-Agent-Cluster
เพื่อพยายามลดผลกระทบต่อประสิทธิภาพที่มีต่อเครื่องมือฝัง
นอกจากนี้ คุณต้องตรวจสอบให้แน่ใจว่าคุณสามารถปิดใช้งานที่ไม่ค่อยมีคนใช้ ฟีเจอร์การสื่อสารข้ามต้นทาง และเว็บไซต์ของคุณกำลังใช้ HTTPS
แต่ท้ายที่สุดแล้ว เคล็ดลับเหล่านี้ก็เป็นเพียงหลักเกณฑ์เท่านั้น คลัสเตอร์ Agent ที่ผูกกับต้นทางจะช่วยเว็บไซต์ของคุณได้หรือไม่ หรือไม่ ในท้ายที่สุด วิธีการพิจารณาที่ดีที่สุด โดยเฉพาะอย่างยิ่ง คุณจะต้องวัดผล Web Vitals และอาจรวมถึงความทรงจำของคุณ การใช้งาน เพื่อดูว่าการคีย์ต้นทางจะส่งผลต่ออะไรบ้าง (การใช้งานหน่วยความจำใน จึงเป็นเรื่องน่ากังวลใจ เพราะการเพิ่มจำนวนของกระบวนการในการเล่นอาจทำให้ โอเวอร์เฮดหน่วยความจำต่อการประมวลผล) คุณไม่ควรเพียงแค่เปิดตัวคีย์ต้นทางและหวังว่าจะได้รับผลลัพธ์ที่ดีที่สุด
สิ่งนี้เกี่ยวข้องกับการแยกแบบข้ามต้นทางอย่างไร
การคีย์ต้นทางของคลัสเตอร์ Agent ผ่านส่วนหัว Origin-Agent-Cluster
นั้นเกี่ยวข้อง แต่แยกต่างหาก
จาก การแยกแบบข้ามต้นทางผ่าน Cross-Origin-Opener-Policy
และ
ส่วนหัว Cross-Origin-Embedder-Policy
เว็บไซต์ที่แยกแบบข้ามต้นทางจะปิดใช้ข้ามต้นทางในเว็บไซต์เดียวกันด้วย
การสื่อสาร เช่น เมื่อใช้ส่วนหัว Origin-Agent-Cluster
อย่างไรก็ตาม
ส่วนหัว Origin-Agent-Cluster
ยังมีประโยชน์นอกเหนือจากการแยกแบบข้ามต้นทาง
ให้เบราว์เซอร์แก้ไขแนวทางการจัดสรรทรัพยากร คุณจึงควรพิจารณา
ใช้ส่วนหัว Origin-Agent-Cluster
และวัดผลลัพธ์ แม้ในหน้าที่
แยกต่างหากแบบข้ามต้นทางแล้ว
วิธีใช้ส่วนหัว Origin-Agent-Cluster
หากต้องการใช้ส่วนหัว Origin-Agent-Cluster
ให้กำหนดค่าเว็บเซิร์ฟเวอร์ให้ส่ง HTTP ต่อไปนี้
ส่วนหัวการตอบกลับ:
Origin-Agent-Cluster: ?1
ค่าของ ?1
คือโครงสร้าง
ไวยากรณ์ส่วนหัวสำหรับบูลีน true
คุณต้องส่งส่วนหัวนี้ในคำตอบทั้งหมดจากต้นทาง ไม่ใช่เพียงบางหน้า มิฉะนั้น คุณอาจได้รับผลลัพธ์ที่ไม่สอดคล้องกันซึ่งเบราว์เซอร์ "จดจำ" กำลังดูคีย์ต้นทาง คำขอเพื่อให้คีย์ต้นทางแม้แต่ในหน้าที่ไม่ได้ขอ หรือในทางกลับกัน ถ้าหน้าแรก การเข้าชมของผู้ใช้ไม่มีส่วนหัว เบราว์เซอร์จะจำว่าต้นทางของคุณไม่ต้องการ จะเชื่อมโยงกับต้นทาง และจะไม่สนใจส่วนหัวในหน้าต่อๆ มา
สาเหตุของ "ความทรงจำ" นี้ คือการตรวจสอบความสอดคล้องของคีย์
สำหรับต้นทาง หากบางหน้าใน
ต้นทางมีการผูกกับต้นทาง แต่หน้าอื่นๆ ไม่ได้เป็นต้นทาง คุณก็อาจมีหน้าต้นทางเดียวกัน 2 หน้าซึ่งมีลักษณะดังนี้
ในกลุ่ม Agent ที่แตกต่างกัน จึงไม่สามารถสื่อสารกันได้ นี่จะเป็น
แปลกมากทั้งสำหรับนักพัฒนาเว็บและภายในของเบราว์เซอร์ ข้อมูลจำเพาะ
สำหรับ Origin-Agent-Cluster
จะไม่สนใจส่วนหัวแทนหากไม่สอดคล้องกับสิ่งที่ก่อนหน้านี้
เห็นจากต้นกำเนิดหนึ่งๆ การดำเนินการนี้จะแสดงคำเตือนของคอนโซลใน Chrome
ความสอดคล้องนี้จำกัดขอบเขตอยู่ที่กลุ่มบริบทของการท่องเว็บซึ่งเป็นกลุ่มแท็บ หน้าต่าง หรือ
iframe ซึ่งทั้งหมดเชื่อมต่อกันได้ผ่านกลไกอย่าง window.opener
, frames[0]
หรือ
window.parent
ซึ่งหมายความว่าเมื่อยุติการผูกกับต้นทางหรือคีย์เว็บไซต์แล้ว (โดย
เห็นหรือไม่เห็นส่วนหัว) การเปลี่ยนส่วนหัวจำเป็นต้องเปิด
ไม่ได้เชื่อมต่อกับแท็บเดิมแต่อย่างใด
รายละเอียดเหล่านี้มีความสำคัญต่อการทดสอบส่วนหัว Origin-Agent-Cluster
เมื่อเพิ่มครั้งแรก
ไปยังเว็บไซต์ของคุณ เพียงแค่โหลดหน้าเว็บซ้ำจะไม่ทำงาน คุณจะต้องปิดแท็บ แล้วเปิดแท็บใหม่
ข้อแรก
หากต้องการตรวจสอบว่ามีการใช้ส่วนหัว Origin-Agent-Cluster
หรือไม่ ให้ใช้ JavaScript
พร็อพเพอร์ตี้ window.originAgentCluster
ค่านี้จะเป็น true
ในกรณีที่ส่วนหัว (หรืออื่นๆ
เช่น การแยกแบบข้ามต้นทาง) ทำให้เกิดการคีย์ต้นทาง false
ตอนที่ไม่มีอยู่ และ undefined
ในเบราว์เซอร์ที่ไม่ได้ใช้ส่วนหัว Origin-Agent-Cluster
การบันทึกข้อมูลนี้ลงในแพลตฟอร์มการวิเคราะห์จะช่วยให้การตรวจสอบที่เป็นประโยชน์ซึ่งคุณได้กำหนดค่าไว้
เซิร์ฟเวอร์ของคุณอย่างถูกต้อง
สุดท้าย โปรดทราบว่าส่วนหัว Origin-Agent-Cluster
จะทำงานในความปลอดภัยเท่านั้น
บริบท เช่น บน HTTPS
หน้าหรือบน http://localhost
หน้า HTTP ที่ไม่ใช่ localhost จะไม่รองรับ Agent ที่ผูกกับต้นทาง
คลัสเตอร์
การคีย์ต้นทางไม่ใช่ฟีเจอร์ความปลอดภัย
ขณะที่การใช้คลัสเตอร์ Agent ที่ผูกกับต้นทางจะแยกต้นทางของคุณจากการเข้าถึงแบบพร้อมกันจาก
หน้าแบบข้ามต้นทางในเว็บไซต์เดียวกัน ไม่ได้ให้การป้องกันของ
ส่วนหัวที่เกี่ยวข้องกับความปลอดภัย เช่น
Cross-Origin-Resource-Policy
และ
Cross-Origin-Opener-Policy
โดยเฉพาะอย่างยิ่ง ไม่ใช่การป้องกันที่เชื่อถือได้สำหรับการโจมตีจากช่องทางด้านข้างอย่าง
Spectre
ซึ่งอาจไม่น่าแปลกใจสักหน่อย เพราะบางครั้งการคีย์ต้นทางอาจทำให้ต้นทางของคุณมีต้นทางเอง
และกระบวนการที่แยกกันเป็นการป้องกันการโจมตีแบบ Side-channel ที่สำคัญ แต่อย่าลืมว่า
ส่วนหัว Origin-Agent-Cluster
เป็นเพียงคำแนะนำในส่วนนั้น เบราว์เซอร์อยู่ภายใต้
มีภาระหน้าที่ในการแยกกระบวนการออกจากต้นทางและอาจไม่ดำเนินการด้วยเหตุผลหลายประการดังนี้
เบราว์เซอร์อาจไม่ใช้เทคโนโลยีในการดำเนินการดังกล่าว ตัวอย่างเช่น ปัจจุบันคือ Safari และ Firefox สามารถใส่แท็บแยกกันลงในกระบวนการของตัวเองได้ แต่ยังทำกับ iframe ไม่ได้
เบราว์เซอร์อาจตัดสินใจว่าไม่คุ้มกับค่าใช้จ่ายในการดำเนินการที่แยกต่างหาก ตัวอย่างเช่น บน อุปกรณ์ Android ที่มีหน่วยความจำต่ำหรือใน Android WebView นั้น Chrome จะใช้กระบวนการน้อยที่สุดเท่าที่จะเป็นไปได้
เบราว์เซอร์อาจต้องพิจารณาคำขอที่ส่วนหัว
Origin-Agent-Cluster
ระบุไว้ แต่ก็สามารถทำได้โดยใช้เทคโนโลยีการแยกที่แตกต่างจากกระบวนการ ตัวอย่างเช่น Chrome คือ การสำรวจ โดยใช้ชุดข้อความแทนกระบวนการสำหรับการแยกประสิทธิภาพในลักษณะนี้ผู้ใช้หรือรหัสที่ทำงานบนเว็บไซต์อื่นอาจไปยังหน้าที่ผูกกับเว็บไซต์แล้ว จากต้นทางของคุณ ซึ่งทำให้การรับประกันความสม่ำเสมอเริ่มขึ้น ระบบจะไม่สนใจส่วนหัว
Origin-Agent-Cluster
ทั้งหมด
ด้วยเหตุนี้ จึงไม่คิดว่าคลัสเตอร์ Agent ที่ผูกกับต้นทางเป็นฟีเจอร์ความปลอดภัย แต่เป็นวิธีช่วยให้เบราว์เซอร์จัดลำดับความสำคัญของการจัดสรรทรัพยากร โดยบอกเป็นนัยว่า จะได้ประโยชน์จากทรัพยากรเฉพาะ (และคุณยินดีที่จะละทิ้ง ฟีเจอร์เพื่อแลกเปลี่ยน)
ความคิดเห็น
ทีม Chrome อยากทราบความคิดเห็นของคุณว่าคุณกำลังใช้หรือพิจารณาที่จะใช้ Origin-Agent-Cluster
ส่วนหัว สาธารณประโยชน์และการสนับสนุนของคุณช่วยให้เราจัดลำดับความสำคัญของฟีเจอร์และแสดงให้
ผู้ให้บริการเบราว์เซอร์ว่ามีความสำคัญเพียงใด ทวีตที่ @ChromiumDev และ
ให้ Chrome DevRel ทราบความคิดและประสบการณ์ของคุณ
หากมีข้อสงสัยเพิ่มเติมเกี่ยวกับข้อกำหนด หรือรายละเอียดวิธีการทำงานของฟีเจอร์ โปรด
แจ้งปัญหาในที่เก็บ HTML ของ GitHub มาตรฐาน และถ้าคุณ
พบปัญหาใดๆ ในการใช้งาน Chrome คุณสามารถรายงานข้อบกพร่องที่
new.crbug.com
ตั้งค่าช่องคอมโพเนนต์เป็น Internals>Sandbox>SiteIsolation
ดูข้อมูลเพิ่มเติม
หากต้องการดูข้อมูลเพิ่มเติมเกี่ยวกับคลัสเตอร์ Agent ที่ผูกกับต้นทาง คุณสามารถเจาะลึกรายละเอียดได้ในลิงก์เหล่านี้