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

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

Domenic Denicola
Domenic Denicola

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

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

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

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