نقل البيانات إلى الإصدار 1 من Reporting API

يتوفّر إصدار جديد من Reporting API. وهي أكثر خصوصية ومن المرجّح أن تكون متوافقة مع جميع المتصفحات.

Maud Nalpas
Maud Nalpas

تُعلمك Reporting API بالأخطاء التي تحدث على موقعك الإلكتروني أثناء استخدام الزوّار له. وتوفّر لك هذه الميزة معرفةً بشأن عمليات التدخل في المتصفّح وأعطاله وانتهاكات سياسة أمان المحتوى وانتهاكات COOP/COEP وتحذيرات الإيقاف النهائي وغير ذلك.

توفّر إصدار جديد من Reporting API: أصبحت واجهة برمجة التطبيقات الجديدة أقل كثافة ويُرجح أن تتوافق مع مختلَف المتصفحات.

ملخّص

مطوّرو المواقع الإلكترونية

إذا كانت لديك حاليًا وظيفة إعداد التقارير لموقعك الإلكتروني: يمكنك نقل البيانات إلى الإصدار 1 باستخدام العنوان الجديد (Reporting-Endpoints)، ولكن عليك الاحتفاظ بالعنوان القديم لبعض الوقت (Report-To). اطّلِع على نقل البيانات: مثال على الرمز.

في حال كنت بصدد إضافة وظيفة إعداد التقارير إلى موقعك الإلكتروني الآن: استخدِم العنوان الجديد فقط (Reporting-Endpoints).

⚠️ في كلتا الحالتَين، احرص على ضبط العنوان Reporting-Endpoints على جميع الردود التي قد تؤدي إلى إنشاء تقارير.

مطوّرو خدمات إعداد التقارير

إذا كنت تدير خدمة نقاط نهاية أو تشغّل خدمتك الخاصة، توقّع زيادة في عدد الزيارات عندما تنقل أنت أو المطوّرون الخارجيون بياناتك إلى Reporting API v1 (عنوان Reporting-Endpoints).

يُرجى مواصلة القراءة للاطّلاع على التفاصيل وأمثلة على الرموز البرمجية.

تسجيل أخطاء الشبكة

سيتم تطوير آلية جديدة لتسجيل أخطاء الشبكة. بعد توفّر هذه الآلية، يمكنك التبديل من الإصدار 0 من Reporting API إلى هذه الآلية الجديدة.

العرض التجريبي والرمز

الاختلافات بين الإصدار 0 والإصدار 1

التغييرات

  • مساحة عرض واجهة برمجة التطبيقات مختلفة.
v0 (قديم)
 Report-To: { group: "main-endpoint", "max_age": 86400, "endpoints": [ { "url": ... }, { "url": ... }] }, { group: "default-endpoint", "max_age": 86400, "endpoints": [ { "url": ... }, { "url": ... }] }
 Document-Policy: ...; report-to main-endpoint

يستخدم {0 العنوان Report-To لضبط مجموعات نقاط النهاية المُسمّاة، وتوجيه report-to في العناوين الأخرى للإشارة إلى مجموعات نقاط النهاية هذه.

الإصدار 1 (جديد)
 Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
 Document-Policy: ...; report-to main-endpoint

يستخدم الإصدار 1 العنوان Reporting-Endpoints لضبط نقاط النهاية المسماة. وعلى غرار الإصدار 0، فهو يستخدم التوجيه report-to في العناوين الأخرى للإشارة إلى مجموعات نقاط النهاية هذه.

  • يختلف نطاق التقرير.
الإصدار 0 (قديم)

باستخدام الإصدار 0، يمكنك ضبط نقاط نهاية إعداد التقارير على بعض الردود فقط. وستستخدم المستندات (الصفحات) الأخرى على هذا المصدر تلقائيًا نقاط النهاية الشاملة هذه.

الإصدار 1 (جديد)

في الإصدار 1، عليك ضبط العنوان Reporting-Endpoints على جميع الإجابات التي قد تؤدي إلى إنشاء تقارير.

  • تتيح كلتا واجهات برمجة التطبيقات أنواع التقارير نفسها، باستثناء واحد: لا تتيح الإصدار 1 من واجهة برمجة التطبيقات تقارير أخطاء الشبكة. يمكنك الاطّلاع على مزيد من المعلومات في خطوات نقل البيانات.
  • لا تتوفّر الإصدارة 0 من الإطار على جميع المتصفّحات ولن تتوفّر في المستقبل. من المرجّح أن تتوفّر الإصدارة 1 على متصفّحات متعددة في المستقبل.

الإجراءات التي لن تتغيّر

  • لم يطرأ أي تغيير على تنسيق التقارير وبنيتها.
  • يظلّ الطلب الذي يرسله المتصفّح إلى نقطة النهاية طلب POST من Content-type application/reports+json.
  • يمكن ربط نقاط نهاية معيّنة بأنواع تقارير معيّنة في كلّ من الإصدار 0 والإصدار 1.
  • لم يتغيّر دور نقطة النهاية default.
  • لا يؤثر الإصدار 1 من Reporting API في ReportingObserver. سيستمرّ تطبيق "ReportingObserver" في الوصول إلى جميع التقارير القابلة للتتبّع، وسيظلّ تنسيقها متطابقًا.

جميع الاختلافات بين الإصدار v0 والإصدار 1

Reporting API القديمة (الإصدار 0)
Report-To العنوان
واجهة Reporting API الجديدة (الإصدار 1)
Reporting-Endpoints العنوان
دعم المتصفح Chrome 69 أو Edge 69 أو الإصدارات الأحدث. الإصدار 96 من Chrome والإصدار 96 من Edge. يتوافق Firefox مع هذه الميزة. لا يعترض Safari على ذلك. راجِع إشارات المتصفِّح.
نقاط النهاية إرسال التقارير إلى أيّ من أدوات جمع التقارير المتعدّدة (عناوين URL متعدّدة محدّدة لكل مجموعة نقاط نهاية) تُرسِل التقارير إلى أدوات تجميع التقارير المحدَّدة (يتم تحديد عنوان URL واحد فقط لكل نقطة نهاية).
واجهة برمجة التطبيقات يتم استخدام العنوان `Report-To` لضبط مجموعات نقاط النهاية المُسَمّاة. يستخدم الرأس `Reporting-Endpoints` لضبط نقاط نهاية مُسمّاة.
أنواع التقارير التي يمكن إنشاؤها من خلال واجهة برمجة التطبيقات هذه
  • الإيقاف النهائي
  • التدخل
  • حادث سير
  • COOP/COEP
  • المستوى 3 من Content-Security-Policy (المستوى 3 من سياسة أمان المحتوى)
  • تسجيل أخطاء الشبكة (NEL)
مزيد من المعلومات حول أنواع التقارير في مشاركة Reporting API
بدون تغيير، باستثناء تسجيل أخطاء الشبكة (NEL): لا تتوفّر هذه الميزة في الإصدار 1 من Reporting API الجديد.
نطاق التقرير للمصدر.
يؤثر عنوان Report-To للمستند في المستندات (الصفحات) الأخرى من هذا المصدر. يظل الحقل url في أي تقرير يختلف من مستند إلى آخر.
مستند.
لا يؤثر عنوان Reporting-Endpoints للمستند إلا في هذا المستند. لا يزال حقل url في التقرير يختلف حسب المستند.
عزل التقارير (التجميع) سيتم تجميع المستندات (الصفحات) أو المواقع الإلكترونية/المصادر المختلفة التي تنشئ تقريرًا في الوقت نفسه تقريبًا والتي لها نقطة نهاية إعداد التقارير نفسها معًا: سيتم إرسالها في الرسالة نفسها إلى نقطة نهاية إعداد التقارير.
  • لا يتم أبدًا إرسال تقارير من مستندات (صفحات) مختلفة معًا. حتى إذا أنشأ مستندان (صفحتان) من المصدر نفسه تقريرًا في الوقت نفسه لنقطة النهاية نفسها، لن يتم تجميعهما في حزمة. هذه آلية للحدّ من هجمات الخصوصية.
  • قد يتم إرسال التقارير من المستند (الصفحة) نفسه معًا.
توفير ميزة موازنة الحمل أو الأولويات نعم لا

مطوّرو نقاط النهاية: توقّع المزيد من الزيارات

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

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

مطوّرو التطبيقات: نقل البيانات إلى Reporting-Endpoints (الإصدار 1)

ما هي الإجراءات التي عليك اتخاذها؟

هناك العديد من المزايا لاستخدام Reporting API الجديدة (الإصدار 1) ✅:

  • إشارات المتصفّح إيجابية، ما يعني أنّه من المتوقّع أن يكون الإصدار 1 متوافقًا مع جميع المتصفّحات (على عكس الإصدار 0 الذي لا يتوافق إلا مع Chrome و Edge).
  • واجهة برمجة التطبيقات أكثر بساطة.
  • يتم تطوير الأدوات حول Reporting API الجديدة (الإصدار 1).

مع أخذ ذلك في الاعتبار:

  • إذا كان موقعك الإلكتروني يستخدم حاليًا الإصدار 0 من Reporting API مع العنوان Report-To، انتقِل إلى الإصدار 1 من Reporting API (يمكنك الاطّلاع على خطوات نقل البيانات). إذا كان موقعك الإلكتروني يستخدم حاليًا وظائف reporting لانتهاكات سياسة أمان المحتوى، اطّلِع على خطوات نقل بيانات إعداد تقارير سياسة أمان المحتوى المحدّدة.
  • إذا لم يكن موقعك الإلكتروني يستخدم Reporting API حاليًا وكنت تضيف الآن وظيفة إعداد التقارير: استخدِم Reporting API الجديدة (الإصدار 1) (عنوان Reporting-Endpoints). هناك استثناء واحد مما سبق : إذا كنت بحاجة إلى استخدام ميزة "تسجيل أخطاء الشبكة"، استخدِم Report-To (الإصدار 0). لا تتوفّر ميزة "تسجيل أخطاء الشبكة" حاليًا في Reporting API v1. سيتم تطوير آلية جديدة لتسجيل أخطاء الشبكة، وإلى أن تصبح متاحة، يمكنك استخدام الإصدار 0 من Reporting API. إذا كنت بحاجة إلى ميزة "تسجيل أخطاء الشبكة" بالإضافة إلى أنواع التقارير الأخرى، استخدِم كلاً من Report-To (الإصدار 0) وReporting-Endpoints (الإصدار 1). يمنحك الإصدار 0 تسجيل أخطاء الشبكة، بينما يمنحك الإصدار 1 تقارير عن جميع الأنواع الأخرى.

خطوات نقل البيانات

هدفك من عملية نقل البيانات هذه هو عدم فقدان التقارير التي كنت تحصل عليها باستخدام الإصدار 0.

  1. الخطوة 1 (يجب تنفيذها الآن): استخدِم كلا العنوانَين: Report-To (الإصدار 0) وReporting-Endpoints (الإصدار 1).

    من خلال ذلك، تحصل على:

    • تقارير من عملاء Chrome وEdge الجدد بفضل Reporting-Endpoints (الإصدار 1)
    • تقارير من عملاء Chrome وEdge الأقدم بفضل Report-To (الإصدار 0)

    ستستخدم نُسخ المتصفّح المتوافقة مع Reporting-Endpoints Reporting-Endpoints، وستتحوّل النُسخ التي لا تتوافق مع Reporting-Endpoints إلى Report-To. التنسيق نفسه للطلب والتقرير في الإصدارين 0 و1

  2. الخطوة 2 (يجب تنفيذها الآن): تأكَّد من ضبط العنوان Reporting-Endpoints على جميع الردود التي قد تؤدي إلى إنشاء تقارير.

    في الإصدار 0، يمكنك اختيار ضبط نقاط نهاية إعداد التقارير على بعض الردود فقط، وستستخدم المستندات الأخرى (الصفحات) في هذا المصدر نقطة النهاية "المحيطة" هذه. في الإصدار 1، بسبب الاختلاف في نطاق التغطية، عليك ضبط عنوان Reporting-Endpoints على جميع الردود التي قد تُنشئ تقارير.

  3. الخطوة 3 (البدء لاحقًا): بعد أن ينتهي جميع المستخدمين أو معظمهم من تثبيت إصدارات أحدث من Chrome أو Edge (الإصدار 96 والإصدارات الأحدث)، أزِل Report-To (الإصدار 0) واحتفظ بـ Reporting-Endpoints فقط.

    استثناء واحد: إذا كنت بحاجة إلى تقارير "تسجيل أخطاء الشبكة"، احتفظ بـ Report-To إلى أن يتم إعداد آلية جديدة لتسجيل أخطاء الشبكة.

اطّلِع على أمثلة الرموز البرمجية في كتاب الوصفات الخاص بعملية نقل البيانات.

خطوات نقل البيانات لإعداد تقارير "خدمة إدارة المحتوى"

هناك طريقتان لضبط تقارير Content-Security-Policy الانتهاكات:

  • باستخدام عنوان CSP فقط من خلال التوجيه report-uri تتوفّر هذه الميزة على نطاق واسع في المتصفّحات Chrome وFirefox وSafari وEdge. يتم إرسال التقارير باستخدام نوع المحتوى application/csp-report ولها تنسيق خاص بخدمة "إدارة الخدمات في السحابة". تُعرف هذه التقارير باسم "تقارير المستوى 2 لخدمات المحتوى في المقارِن" ولا تعتمد على Reporting API.
  • باستخدام Reporting API، يتم ذلك من خلال العنوان Report-To (القديم) أو العنوان الأحدث Reporting-Endpoints (الإصدار 1). تتوفّر هذه الميزة في Chrome وEdge فقط. تكون طلبات الإبلاغ بالتنسيق نفسه المستخدَم في طلبات واجهة Reporting API الأخرى، ونوع المحتوى نفسه في السمة application/reports+json.

لم يعُد يُنصح باستخدام الطريقة الأولى (report-uri فقط)، وهناك بعض المزايا لاستخدام الطريقة الثانية. على وجه الخصوص، تتيح لك هذه الواجهة استخدام طريقة واحدة لإعداد إعدادات إعداد التقارير لجميع أنواع التقارير، بالإضافة إلى ضبط نقطة نهاية عامة (لأنّ جميع طلبات التقارير التي يتم إنشاؤها من خلال Reporting API⏤CSP والآخرين⏤ لها التنسيق نفسه application/reports+json.

يُرجى العِلم أنّ بعض المتصفّحات فقط تتوافق مع report-to. لذلك، ننصحك بالاحتفاظ بـ report-uri إلى جانب نهج Reporting API (Report-To أو Reporting-Endpoints بشكل أفضل) للحصول على تقارير مخالفات بروتوكول CSP من متصفّحات متعدّدة. في متصفّح يتعرّف على report-uri وreport-to، سيتم تجاهل report-uri إذا كانreport-to متوفّرًا. في متصفّح يتعرّف على report-uri فقط، سيتم اعتبار report-uri فقط.

  1. الخطوة 1 (يجب تنفيذها الآن): أضِف report-to بجانب report-uri إذا لم يسبق لك ذلك. ستستخدم المتصفّحات التي تتيح استخدام report-uri فقط (Firefox) report-uri، وستستخدم المتصفّحات التي تتيح استخدام report-to أيضًا (Chrome وEdge) report-to. لتحديد نقاط النهاية المُسمّاة التي ستستخدمها في report-to، استخدِم كلا العنوانَين Report-To وReporting-Endpoints. يضمن لك ذلك تلقّي التقارير من عملاء Chrome وEdge الجدد والقدامى.

  2. الخطوة 3 (البدء لاحقًا): بعد أن ينتهي جميع المستخدمين أو معظمهم من تثبيت إصدارات أحدث من Chrome أو Edge (الإصدار 96 والإصدارات الأحدث)، أزِل Report-To (الإصدار 0) واحتفظ بـ Reporting-Endpoints فقط. Keep report-uri حتى يظل بإمكانك الحصول على تقارير للمتصفّحات التي تتوافق معه فقط.

يمكنك الاطّلاع على أمثلة على الرموز البرمجية لهذه الخطوات في مقالة نقل تقارير "شركاء المحتوى في خرائط Google".

نقل البيانات: مثال على الرمز البرمجي

نظرة عامة

إذا كنت تستخدم Reporting API القديمة (الإصدار 0) للحصول على تقارير الانتهاكات المتعلّقة بسياسة تعاون المعلِنين (Cross-Origin-Opener-Policy header) أو سياسة موافقة المستخدِم (Cross-Origin-Embedder-Policy) أو سياسة المستند (Document-Policy header)، لن تحتاج إلى تغيير رؤوس السياسات هذه أثناء نقل بياناتك إلى Reporting API الإصدار 1. ما عليك سوى نقل البيانات من عنوان Report-To القديم إلى العنوان الجديد Reporting-Endpoints.

إذا كنت تستخدم Reporting API القديمة (الإصدار 0) للحصول على تقارير الانتهاكات لبروتوكول CSP (عنوان Content-Security-Policy)، قد تحتاج إلى تعديل Content-Security-Policy كجزء من عملية نقل البيانات إلى Reporting API الجديدة (الإصدار 1).

نقل البيانات الأساسي

الرمز القديم (مع الإصدار 0)
Report-To: { group: "main-endpoint", "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "endpoints": [ { "url": "https://reports.example/default" }] }
رمز جديد (رمز نقل مع الإصدار 0 إلى جانب الإصدار 1)
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
Report-To: { group: "main-endpoint", "max_age": 86400, "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "max_age": 86400, "endpoints": [ { "url": "https://reports.example/default" }] }

إذا كانت لديك وظائف إعداد التقارير في موقعك الإلكتروني، احتفظ بـ Report-To بشكل مؤقت فقط (إلى أن يتم تحديث معظم عملاء Chrome وEdge) لتجنُّب فقدان التقارير.

إذا كنت بحاجة إلى تسجيل أخطاء في الشبكة، يُرجى الاحتفاظ بـ Report-To إلى أن يصبح بديل تسجيل الأخطاء في الشبكة متاحًا.

رمز جديد (مع الإصدار 1 فقط)
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"

هذا هو الشكل الذي يمكن أن يبدو عليه الرمز البرمجي في المستقبل، بعد تحديث معظم عملاء Chrome وEdge وتوافقهم مع الإصدار 1 من واجهة برمجة التطبيقات.

يُرجى العِلم أنّه باستخدام الإصدار 1، سيظل بإمكانك إرسال أنواع تقارير محدّدة إلى نقاط نهاية محدّدة. ولكن يمكنك استخدام عنوان URL واحد فقط لكل نقطة نهاية.

مراقبة جميع الصفحات

رمز قديم (مع الإصدار 0)، على سبيل المثال مع Express
app.get("/", (request, response) => {
  response.set("Report-To", )
  response.render(...)
});
app.get("/page1", (request, response) => {
  response.render(...)
});

باستخدام الإصدار 0، يمكنك ضبط نقاط نهاية إعداد التقارير على بعض الردود فقط. تستخدِم المستندات الأخرى (الصفحات) على هذا المصدر نقاط النهاية هذه تلقائيًا. في ما يلي، يتم استخدام نقاط النهاية التي تم ضبطها للعنصر "/" لجميع الردود، على سبيل المثال page1.

رمز جديد (مع الإصدار 1)، مثلاً مع Express
// Use a middleware to set the reporting endpoint(s) for *all* requests.
app.use(function(request, response, next) {
  response.set("Reporting-Endpoints", );
  next();
});

app.get("/", (request, response) => {
  response.render(...)
});

app.get("/page1", (request, response) => {
  response.render(...)
});

أما في الإصدار 1، فعليك ضبط العنوان Reporting-Endpoints على جميع الردود التي قد تؤدي إلى إنشاء تقارير.

نقل تقارير سياسة أمان المحتوى (CSP)

الرمز القديم الذي يتضمّن report-uri فقط
Content-Security-Policy: ...; report-uri https://reports.example/main

لم يعُد استخدام report-uri فقط مُقترَحًا. إذا كان الرمز يبدو على النحو الموضّح أعلاه، عليك نقل البيانات. اطّلِع على أمثلة الرموز الجديدة أدناه (باللون الأخضر).

رمز قديم أفضل، مع report-uri والتوجيه report-to مع العنوان Report-To (v0)
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint
Report-To: main-endpoint="https://reports.example/main"

هذا الرمز أفضل: يستخدم هذا الرمز report-to، وهو البديل الجديد لمحاولة report-uri. لا يزال التنسيق report-uri متاحًا للحفاظ على التوافق مع الإصدارات القديمة، لأنّ العديد من المتصفّحات لا تتيح استخدام التنسيق report-to ولكنها تتيح استخدام التنسيق report-uri.

ومع ذلك، قد يكون هذا أفضل: تستخدم هذه الرموز الإصدار 0 من Reporting API (العنوان Report-To). نقل البيانات إلى الإصدار 1: اطّلِع على مثال "الرمز الجديد" أدناه (باللون الأخضر).

رمز جديد، به report-uri و report-to مع العنوان Reporting-Endpoints (v1)
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint
Reporting-Endpoints: main-endpoint="https://reports.example/main"
Report-To: ...

يجب إبقاء التوجيه report-uri بجانب التوجيه report-to إلى أن يصبح التوجيه report-to متاحًا في جميع المتصفّحات. يمكنك الاطّلاع على جدول توافق المتصفّح.

يُرجى إبقاء Report-To بجانب Reporting-Endpoints مؤقتًا. بعد ترقية معظم مستخدمي Chrome وEdge إلى إصدارات المتصفّح 96 والإصدارات الأحدث، أزِل Report-To.

محتوى إضافي للقراءة

مع جزيل الشكر إلى إيان كليلاند وإيجي كاتامورا وميليكا ميهايليجا على مراجعاتهم واقتراحاتهم بشأن هذه المقالة.