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

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

دينكولا دومينيك
دومينيك دينيكولا

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

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

في الوقت الحالي، يتم تنفيذ عنوان Origin-Agent-Cluster فقط في الإصدار 88 من Chrome والإصدارات الأحدث. وقد تم تصميمه بالتعاون الوثيق مع ممثلين من 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.

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

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