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

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

Domenic Denicola
Domenic Denicola

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

توافُق المتصفح

لا يتم تنفيذ عنوان Origin-Agent-Cluster حاليًا إلا في الإصدار Chrome 88 والإصدارات الأحدث. وقد تم تصميم هذا البرنامج بالتعاون الوثيق مع ممثلين من Mozilla Firefox وضعوا علامة عليه كـ نموذج أوّلي، وحظي باستقبال إيجابي أولي من ممثلي 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 إطارات iframe https://chat.example.com، يضمن مفتاح التشفير 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، استخدِم السمة window.originAgentCluster الخاصة بلغة JavaScript. سيكون هذا 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 بمعرفة أفكارك وتجاربك.

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

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

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