دليل لتفعيل ميزة حظر الوصول من نطاقات أخرى

تتيح ميزة "حظر الوصول من نطاقات أخرى" لصفحة الويب استخدام ميزات فعّالة، مثل SharedArrayBuffer. توضّح هذه المقالة كيفية تفعيل ميزة "حظر الوصول من نطاقات أخرى" على موقعك الإلكتروني.

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

إذا كنت تنوي تفعيل ميزة العزل متعدد المصادر، عليك تقييم تأثير ذلك في الموارد الأخرى متعددة المصادر على موقعك الإلكتروني، مثل مواضع الإعلانات.

تحديد مكان استخدام SharedArrayBuffer في موقعك الإلكتروني

اعتبارًا من الإصدار 92 من Chrome، لن تعمل الوظائف التي تستخدم SharedArrayBuffer بدون ميزة "حظر الوصول من نطاقات أخرى". إذا انتقلت إلى هذه الصفحة بسبب رسالة إيقاف نهائي لـ SharedArrayBuffer، من المحتمل أنّ موقعك الإلكتروني أو أحد المَراجع المضمّنة فيه يستخدم SharedArrayBuffer. لضمان عدم حدوث أي أعطال في موقعك الإلكتروني بسبب الإيقاف النهائي، ابدأ بـ تحديد مكان استخدامها.

إذا لم تكن متأكدًا من مكان استخدام SharedArrayBuffer في موقعك الإلكتروني، هناك طريقتان لمعرفة ذلك:

  • استخدام "أدوات مطوري البرامج في Chrome"
  • (خيار متقدّم) استخدام ميزة "الإبلاغ عن الإيقاف النهائي"

إذا كنت تعرف مكان استخدام SharedArrayBuffer، انتقِل إلى تحليل تأثير ميزة "حظر الوصول من نطاقات أخرى".

استخدام "أدوات مطوري البرامج في Chrome"

تسمح "أدوات مطوري البرامج في Chrome" للمطوّرين بفحص المواقع الإلكترونية.

  1. افتح "أدوات مطوري البرامج في Chrome" على الصفحة التي تشكّ في أنّها قد تستخدم SharedArrayBuffer.
  2. انقر على لوحة وحدة التحكّم.
  3. إذا كانت الصفحة تستخدم SharedArrayBuffer، ستظهر الرسالة التالية:
    [Deprecation] SharedArrayBuffer will require cross-origin isolation as of M92, around May 2021. See  for more details. common-bundle.js:535
  4. يشير اسم الملف ورقم السطر في نهاية الرسالة (على سبيل المثال، common-bundle.js:535) إلى مصدر SharedArrayBuffer إذا كانت مكتبة خارجية، عليك التواصل مع المطوّر لإصلاح المشكلة. إذا تم تنفيذها كجزء من موقعك الإلكتروني، اتّبِع الدليل أدناه لتفعيل ميزة "حظر الوصول من نطاقات أخرى".
تحذير في "وحدة تحكّم أدوات مطوّري البرامج" عند استخدام SharedArrayBuffer بدون حظر الوصول من نطاقات أخرى
تحذير في "وحدة تحكّم أدوات مطوري البرامج" عند استخدام SharedArrayBuffer بدون ميزة "حظر الوصول من نطاقات أخرى".

(خيار متقدّم) استخدام ميزة "الإبلاغ عن الإيقاف النهائي"

تتضمّن بعض المتصفّحات وظيفة إبلاغ عن إيقاف نهائي لواجهات برمجة التطبيقات إلى نقطة نهاية محدّدة.

  1. يمكنك إعداد خادم لتقارير الإيقاف النهائي والحصول على عنوان URL للإبلاغ. يمكنك تحقيق ذلك إما باستخدام خدمة عامة أو إنشاء خدمة بنفسك.
  2. باستخدام عنوان URL، اضبط عنوان HTTP التالي على الصفحات التي من المحتمل أن تعرض SharedArrayBuffer.
    Report-To: {"group":"default","max_age":86400,"endpoints":[{"url":"THE_DEPRECATION_ENDPOINT_URL"}]}
  3. بعد أن يبدأ العنوان في الانتشار، من المفترض أن تبدأ نقطة النهاية التي سجّلتها في جمع تقارير الإيقاف النهائي.

يمكنك الاطّلاع على مثال على عملية التنفيذ.

تحليل تأثير ميزة "حظر الوصول من نطاقات أخرى"

سيكون من الرائع لو كان بإمكانك تقييم تأثير تفعيل ميزة "حظر الوصول من نطاقات أخرى" على موقعك الإلكتروني بدون إحداث أي أعطال. يسمح لك عنوانا HTTP ‏ Cross-Origin-Opener-Policy-Report-Only و Cross-Origin-Embedder-Policy-Report-Only بذلك.

  1. اضبط Cross-Origin-Opener-Policy-Report-Only: same-origin على المستند ذي المستوى الأعلى. كما يشير الاسم، لا يرسل هذا العنوان سوى تقارير عن التأثير الذي سيحدثه COOP: same-origin على موقعك الإلكتروني، ولن يؤدي في الواقع إلى إيقاف التواصل مع النوافذ المنبثقة.
  2. يمكنك إعداد ميزة الإبلاغ وضبط خادم ويب لتلقّي التقارير وحفظها.
  3. اضبط Cross-Origin-Embedder-Policy-Report-Only: require-corp على المستند ذي المستوى الأعلى. مرة أخرى، يتيح لك هذا العنوان الاطّلاع على تأثير تفعيل COEP: require-corp بدون التأثير في أداء موقعك الإلكتروني بعد. يمكنك ضبط هذا العنوان لإرسال التقارير إلى خادم الإبلاغ نفسه الذي أعددته في الخطوة السابقة.

التخفيف من تأثير ميزة "حظر الوصول من نطاقات أخرى"

بعد تحديد المَراجع التي ستتأثر بميزة "حظر الوصول من نطاقات أخرى"، إليك إرشادات عامة حول كيفية تفعيل هذه المَراجع التي يتم الوصول إليها من نطاقات أخرى:

  1. بالنسبة إلى المَراجع متعدّدة المصادر، مثل الصور والنصوص البرمجية وأوراق الأنماط وإطارات iframe وغيرها، اضبط العنوان Cross-Origin-Resource-Policy:cross-origin. بالنسبة إلى المَراجع التي يتم الوصول إليها من الموقع الإلكتروني نفسه، اضبط Cross-Origin-Resource-Policy:same-site
  2. بالنسبة إلى المَراجع التي يمكن تحميلها باستخدام CORS، تأكَّد من تفعيلها عن طريق ضبط السمة crossorigin في علامة HTML الخاصة بها (على سبيل المثال، <img src="example.jpg" crossorigin>). بالنسبة إلى طلبات JavaScript، تأكَّد من ضبط request.mode على cors.
  3. إذا أردت استخدام ميزات فعّالة، مثل SharedArrayBuffer، داخل iframe تم تحميله، ألحِق allow="cross-origin-isolated" بعلامة <iframe>.
  4. إذا كانت المَراجع متعدّدة المصادر التي تم تحميلها في إطارات iframe أو نصوص برمجية للمنفّذ تتضمّن طبقة أخرى من إطارات iframe أو نصوص برمجية للمنفّذ، عليك تطبيق الخطوات الموضّحة في هذا القسم بشكلٍ متكرّر قبل المتابعة.
  5. بعد التأكّد من تفعيل جميع الموارد متعدّدة المصادر، اضبط العنوان Cross-Origin-Embedder-Policy: require-corp على إطارات iframe والنصوص البرمجية للمنفِّذ (هذا الإجراء مطلوب بغض النظر عن ما إذا كان يتم الوصول إلى الموارد من المصدر نفسه أو من مصادر أخرى).
  6. تأكَّد من عدم وجود نوافذ منبثقة متعدّدة المصادر تتطلّب التواصل من خلال postMessage(). لا يمكن أن تظل هذه النوافذ تعمل عند تفعيل ميزة "حظر الوصول من نطاقات أخرى". يمكنك نقل عملية التواصل إلى مستند آخر لا يتم فيه حظر الوصول من نطاقات أخرى، أو استخدام طريقة تواصل مختلفة (على سبيل المثال، طلبات HTTP).

تفعيل ميزة "حظر الوصول من نطاقات أخرى"

بعد التخفيف من تأثير ميزة "حظر الوصول من نطاقات أخرى"، إليك إرشادات عامة لتفعيلها:

  1. اضبط العنوان Cross-Origin-Opener-Policy: same-origin على المستند ذي المستوى الأعلى. إذا كنت قد ضبطت Cross-Origin-Opener-Policy-Report-Only: same-origin، عليك استبداله. يؤدي ذلك إلى حظر التواصل بين المستند ذي المستوى الأعلى والنوافذ المنبثقة.
  2. اضبط العنوان Cross-Origin-Embedder-Policy: require-corp على المستند ذي المستوى الأعلى. إذا كنت قد ضبطت Cross-Origin-Embedder-Policy-Report-Only: require-corp، عليك استبداله. سيؤدي ذلك إلى حظر تحميل المَراجع متعدّدة المصادر التي لم يتم تفعيلها.
  3. تأكَّد من أنّ self.crossOriginIsolated تعرض true في وحدة التحكّم للتحقّق من أنّ صفحتك تحظر الوصول من نطاقات أخرى.

الموارد