طلب عزل الأداء باستخدام عنوان Origin-Agent-Cluster

عنوان استجابة HTTP جديد للحد من النصوص البرمجية على مستوى النطاق وطلب موارد مخصّصة من المتصفّح

Domenic Denicola
Domenic Denicola

Origin-Agent-Cluster هو عنوان استجابة HTTP جديد يوجّه المتصفّح إلى منع الوصول إلى النصوص البرمجية غير المتزامنة بين صفحات الموقع الإلكتروني نفسه من مصادر متعددة. قد تستخدم المتصفّحات أيضًا Origin-Agent-Cluster كإشارة إلى أنّه يجب أن يحصل مصدرك على موارد منفصلة خاصة به، مثل عملية مخصّصة.

لا يتم حاليًا تنفيذ العنوان Origin-Agent-Cluster إلا في الإصدار 88 من Chrome والإصدارات الأحدث. تم تصميمه بالتعاون الوثيق مع ممثلي Mozilla Firefox الذين وضعوا علامة عليه تفيد بأنّه يستحق prototyping، وتلقّى تقييمًا مبدئيًا إيجابيًا من ممثلي WebKit، محرّك المتصفّح المستخدَم في Safari.

في الوقت الحالي، لا مشكلة في نشر العنوان Origin-Agent-Cluster لجميع المستخدِمين اليوم. أما المتصفّحات التي لا تفهمها، فستتجاهلها. وبما أنّ الصفحات في مجموعات الوكلاء المقترَنة بالمصدر يمكنها تنفيذ عدد إجراءات أقل من الصفحات المقترَنة بالموقع الإلكتروني (الإعداد التلقائي)، فلا داعي للقلق بشأن مشكلة التشغيل التفاعلي.

سبب عدم تمكّن المتصفّحات من فصل أصول الموقع الإلكتروني نفسه تلقائيًا

تم تصميم الويب استنادًا إلى سياسة المصدر نفسه، وهي ميزة أمان تقيد كيفية تفاعل المستندات والنصوص البرمجية مع الموارد من مصدر آخر. على سبيل المثال، تكون الصفحة المستضافة على https://a.example من مصدر مختلف عن الصفحة المستضافة على https://b.example أو https://sub.a.example.

في الكواليس، تستخدم المتصفّحات الفصل الذي يوفّره مصدر البيانات بطرق مختلفة. في الأيام القليلة الماضية، على الرغم من أنّ المصادر المنفصلة لن تتمكّن من الوصول إلى بيانات بعضها البعض، إلا أنّها ستظل تشارك الموارد، مثل سلاسل المهام وعمليات نظام التشغيل وتخصيص الذاكرة. وهذا يعني أنّه إذا كانت علامة تبويب واحدة بطيئة، سيؤدّي ذلك إلى إبطاء جميع علامات التبويب الأخرى. أو إذا كانت علامة تبويب واحدة تستهلك مساحة كبيرة جدًا من الذاكرة، قد يؤدي ذلك إلى تعطُّل المتصفّح بأكمله.

أصبحت المتصفّحات في الوقت الحالي أكثر تطوّرًا، وتحاول فصل مصادر البيانات المختلفة في عمليات مختلفة. تختلف آلية عمل ذلك باختلاف المتصفّح: فمعظم المتصفّحات توفّر مستوى معيّنًا من الفصل بين علامات التبويب، ولكن قد تشترك إطارات iframe المختلفة داخل علامة تبويب واحدة في عملية واحدة. ولأنّ العمليات تتطلّب بعض الذاكرة الإضافية، تستخدم طرقًا استقرائية لتجنّب إنشاء عدد كبير جدًا منها: على سبيل المثال، يتضمّن Firefox حدًا أقصى للعمليات يمكن للمستخدم ضبطه، ويغيّر Chrome سلوكه بين أجهزة الكمبيوتر المكتبي (حيث تكون الذاكرة أكثر وفرة) والأجهزة الجوّالة (حيث تكون محدودة).

إنّ هذه الأساليب الاستقرائية ليست مثالية. وتواجه هذه الطلبات قيودًا مهمة: بسبب وجود استثناءات لسياسة المصدر نفسه التي تسمح للنطاقات الفرعية، مثل https://sub.a.example و https://a.example، بالتواصل مع بعضها البعض، لا يمكن للمتصفّحات فصل النطاقات الفرعية تلقائيًا عن بعضها البعض.

يُعرف هذا السلوك التلقائي باسم "مجموعات الصفحات المجمَّعة حسب الموقع الإلكتروني"، أي أنّ المتصفّح يجمّع الصفحات استنادًا إلى موقعها الإلكتروني. يطلب عنوان Origin-Agent-Cluster الجديد من المتصفّح تغيير هذا السلوك التلقائي لصفحة معيّنة، ويضع الصفحة في مجموعة وكلاء مستندة إلى المصدر، بحيث يتم تجميعها فقط مع الصفحات الأخرى التي لها المصدر نفسه بالضبط. وعلى وجه الخصوص، سيتم استبعاد الصفحات من مصادر متعددة للموقع الإلكتروني نفسه من مجموعة الوكلاء.

يسمح هذا الفصل الاختياري للمتصفّحات بمنح مجموعات الصفحات المجمَّعة الجديدة حسب المصدر هذه موارد مخصّصة لها، والتي لا يتم دمجها مع موارد المصادر الأخرى. على سبيل المثال، يمكن أن تحصل هذه الصفحات على عملية خاصة بها، أو يمكن جدولتها في سلاسل محادثات منفصلة. من خلال إضافة العنوان Origin-Agent-Cluster إلى صفحتك، تشير إلى المتصفّح بأنّ الصفحة ستستفيد من هذه الموارد المخصّصة.

ومع ذلك، لإجراء عملية الفصل والاستفادة من هذه المزايا، يجب أن يوقف المتصفّح بعض الميزات القديمة.

الإجراءات التي لا يمكن للصفحات المستندة إلى مصدر تنفيذها

عندما تكون صفحتك في مجموعة وكلاء مستندة إلى المصدر، ستفقد بعض الإمكانات للتواصل مع صفحات الموقع نفسه صفحات المصادر المختلفة التي كانت متاحة سابقًا. وعلى وجه الخصوص:

  • لم يعُد بإمكانك ضبط document.domain. هذه ميزة قديمة تسمح عادةً للصفحات من مصادر متعددة على الموقع الإلكتروني نفسه بالوصول بشكل متزامن إلى DOM الآخر، ولكن يتم إيقافها في مجموعات الوكلاء المستندة إلى المصدر.

  • لم يعُد بإمكانك إرسال كائنات WebAssembly.Module إلى صفحات أخرى من مصدر مختلف على الموقع نفسه من خلال postMessage().

  • (في Chrome فقط) لم يعُد بإمكانك إرسال عناصر SharedArrayBuffer أو WebAssembly.Memory إلى صفحات أخرى من مصدر مختلف على الموقع الإلكتروني نفسه.

حالات استخدام مجموعات الوكلاء المستنِدة إلى المصدر

إنّ مصادر البيانات التي تستفيد إلى أقصى حدّ من العنوان Origin-Agent-Cluster هي تلك التي:

  • تحقيق أفضل أداء باستخدام مواردها المخصّصة متى أمكن وتشمل الأمثلة الألعاب التي تتطلّب أداءً عاليًا أو المواقع الإلكترونية التي توفّر خدمة مؤتمرات الفيديو أو تطبيقات إنشاء الوسائط المتعددة.

  • يحتوي على إطارات iframe تستهلك الكثير من الموارد ومصدرها مختلف ولكنّها على الموقع الإلكتروني نفسه. على سبيل المثال، إذا كانت https://mail.example.com تضمّن https://chat.example.com إطارات iframe، تضمن ميزة "مفتاح المصدر" https://mail.example.com/ عدم تداخل الرمز البرمجي الذي كتبه فريق المحادثة مع الرمز البرمجي الذي كتبه فريق البريد عن طريق الخطأ، ويمكن أن تلمح إلى المتصفّح لمنحه عمليات منفصلة لجدولة هذه العمليات بشكل مستقل وتقليل تأثير أدائها على بعضها البعض.

  • من المتوقّع أن يتم تضمينها في صفحات الموقع الإلكتروني نفسه من مصادر مختلفة، ولكن يُعرف عنها أنّها تستهلك موارد كثيرة. على سبيل المثال، إذا كان موقع https://customerservicewidget.example.com الإلكتروني يتوقّع استخدام الكثير من الموارد لمكالمات الفيديو، وسيتم تضمينه في مصادر مختلفة في https://*.example.com، يمكن للفريق الذي يدير التطبيق المصغّر استخدام العنوان Origin-Agent-Cluster لمحاولة تقليل تأثير أدائه على مُضمِّني التطبيق المصغّر.

بالإضافة إلى ذلك، عليك التأكّد من أنّه لا بأس بإيقاف ميزات التواصل التي نادرًا ما يتم استخدامها بين مصادر مختلفة المذكورة أعلاه، ومن أنّ موقعك الإلكتروني يستخدم بروتوكول HTTPS.

في النهاية، هذه ليست سوى إرشادات. إنّ تحديد ما إذا كانت مجموعات الوكلاء المستنِدة إلى المصدر ستساعد موقعك الإلكتروني أم لا يتم تحديده في نهاية المطاف من خلال القياسات. وعلى وجه الخصوص، عليك قياس مؤشرات أداء الويب، وربما استخدام الذاكرة، لمعرفة تأثير "مفتاح المصدر". (يُعدّ استخدام الذاكرة على وجه الخصوص مصدر قلق محتمل، لأنّ زيادة عدد العمليات الجارية يمكن أن تؤدي إلى زيادة المساحة المخصّصة للذاكرة لكل عملية). لا يجب طرح ميزة "مفتاح المصدر" على أمل تحقيق أفضل النتائج.

ما هي علاقة ذلك بحظر الوصول من نطاقات أخرى؟

إنّ تجميع الوكلاء استنادًا إلى المصدر من خلال عنوان 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 العنوان لقيمة منطقية.

من المهم إرسال هذا العنوان في جميع الردود الواردة من مصدرك، وليس في بعض الصفحات فقط. بخلاف ذلك، يمكنك الحصول على نتائج غير متّسقة، حيث "يتذكر" المتصفّح ظهور طلب بدء تشفير مفتاح المصدر، وبالتالي يُجري عملية بدء تشفير مفتاح المصدر حتى على الصفحات التي لا تطلب ذلك. أو العكس: إذا كانت الصفحة الأولى التي ينتقل إليها المستخدِم لا تحتوي على العنوان، سيتذكر المتصفّح أنّ مصدرك لا يريد استخدام ملف تعريف الارتباط بالاستناد إلى المصدر، وسيتجاهل العنوان في الصفحات اللاحقة.

ويهدف هذا "الذاكرة" إلى ضمان اتساق مفتاح التشفير لمصدر معيّن. إذا كانت بعض الصفحات على مصدر معيّن مفعّلة بتصفية حسب المصدر، في حين أنّ صفحات أخرى لم تكن مفعّلة، قد يكون لديك صفحتان من المصدر نفسه تم وضعهما في مجموعات موظّفي دعم مختلفة، وبالتالي لم يُسمح لهما بالتواصل مع بعضهما. سيكون ذلك أمرًا غريبًا جدًا، سواء بالنسبة إلى مطوّري الويب أو بالنسبة إلى التفاصيل الداخلية للمتصفّح. وبالتالي، تتجاهل مواصفات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 التي لا تشير إلى المضيف المحلي مع مجموعات العوامل المستندة إلى المصدر.

إنّ استخدام مفاتيح التشفير للمصدر ليس ميزة أمان.

على الرغم من أنّ استخدام مجموعة وكلاء مستندة إلى المصدر يعزّل مصدرك عن الوصول المتزامن من الصفحات التي لها مصادر مختلفة على الموقع نفسه، إلا أنّه لا يوفّر الحماية من العناوين ذات الصلة بالأمان، مثل Cross-Origin-Resource-Policy و Cross-Origin-Opener-Policy. وعلى وجه التحديد، لا يقدّم هذا الإجراء حماية موثوقة ضد هجمات القناة الجانبية، مثل Spectre.

قد يكون هذا الأمر مفاجئًا بعض الشيء، لأنّ استخدام مفتاح المصدر قد يؤدي أحيانًا إلى حصول المصدر على عملية خاصة به، وتشكل العمليات المنفصلة دفاعًا مهمًا ضد هجمات قناة جانبية. ولكن تذكَّر أنّ العنوان Origin-Agent-Cluster هو مجرد تلميح في هذا الشأن. لا يُلزَم المتصفّح بمنح مصدرك عملية منفصلة، وقد لا يفعل ذلك لأسباب مختلفة:

  • قد لا ينفِّذ المتصفّح التكنولوجيا اللازمة لإجراء ذلك. على سبيل المثال، يمكن حاليًا لمتصفّحَي Safari وFirefox وضع علامات تبويب منفصلة في عملياتهما، ولكن لا يمكنهما إجراء ذلك بعد مع إطارات iframe.

  • قد يقرر المتصفّح أنّه لا يستحقّ استخدام عملية منفصلة. على سبيل المثال، على أجهزة Android ذات الذاكرة المنخفضة أو في Android WebView، يستخدم Chrome أقل عدد ممكن من العمليات.

  • قد يريد المتصفّح الالتزام بالطلب الذي يشير إليه رأس Origin-Agent-Cluster، ولكن يمكنه إجراء ذلك باستخدام تقنية عزل مختلفة عن العمليات. على سبيل المثال، يجري Chrome استكشافًا لاستخدام سلاسل المهام بدلاً من العمليات لهذا النوع من عزل الأداء.

  • قد يكون المستخدم أو الرمز البرمجي الذي يتم تشغيله على موقع إلكتروني مختلف قد انتقلا إلى صفحة مفعَّلة على مستوى الموقع الإلكتروني على مصدرك، ما يؤدي إلى تفعيل ضمان الاتساق وتجاهل العنوان Origin-Agent-Cluster بالكامل.

لهذه الأسباب، من المهم عدم اعتبار مجموعات موظّفي الدعم المستندة إلى المصدر ميزة أمان. بدلاً من ذلك، هي طريقة لمساعدة المتصفّح في تحديد أولويات تخصيص الموارد، من خلال التلميح إلى أنّ مصدرك سيستفيد من الموارد المخصّصة (وأنّك مستعد للتخلي عن ميزات معيّنة في المقابل).

ملاحظات

يسرّ فريق Chrome معرفة ما إذا كنت تستخدم عنوان Origin-Agent-Cluster أو تفكر في استخدامه. يساعدنا اهتمامك العام ودعمك في تحديد أولويات الميزات وإظهار مدى أهميتها لموفّري المتصفّحات الآخرين. يمكنك نشر تغريدة على ‎@ChromiumDev و إعلام فريق Chrome DevRel بآرائك وتجاربك.

إذا كانت لديك أسئلة أخرى حول المواصفات أو تفاصيل آلية عمل الميزة، يمكنك إرسال مشكلة في مستودع GitHub الخاص بمعيار HTML. إذا واجهت أي مشاكل في عملية التنفيذ في Chrome، يمكنك الإبلاغ عن خطأ على الرابط new.crbug.com مع ضبط حقل "المكوّنات" على Internals>Sandbox>SiteIsolation.

مزيد من المعلومات

للاطّلاع على مزيد من المعلومات عن مجموعات موظّفي الدعم المستندة إلى مصدر الطلب، يمكنك الاطّلاع على التفاصيل في الروابط التالية: