يتوفّر إصدار جديد من Reporting API. وهي أكثر خصوصية ومن المرجّح أن تكون متوافقة مع جميع المتصفحات.
تُعلمك Reporting API بالأخطاء التي تحدث في موقعك الإلكتروني عندما يستخدمه الزوّار. تتيح لك هذه الأداة الاطّلاع على تدخلات المتصفح وتعطُّله وانتهاكات "سياسة أمان المحتوى" وانتهاكات COOP/COEP وتحذيرات الإيقاف النهائي وغير ذلك.
يتوفّر إصدار جديد من Reporting API. تتسم واجهة برمجة التطبيقات الجديدة بأنّها أكثر بساطة ومن المرجّح أن تكون متوافقة مع جميع المتصفحات.
ملخّص
مطوّرو المواقع الإلكترونية
إذا كان موقعك الإلكتروني يتضمّن وظيفة إعداد التقارير: انتقِل إلى الإصدار 1 باستخدام العنوان الجديد (Reporting-Endpoints)، ولكن احتفِظ بالعنوان القديم لبعض الوقت (Report-To).
اطّلِع على النقل: مثال على الرمز.
إذا كنت بصدد إضافة وظيفة الإبلاغ إلى موقعك الإلكتروني الآن: استخدِم العنوان الجديد فقط (Reporting-Endpoints).
⚠️ في كلتا الحالتين، احرص على ضبط العنوان Reporting-Endpoints على جميع الردود التي قد تنشئ تقارير.
مطوّرو خدمة إعداد التقارير
إذا كنت تحتفظ بخدمة نقطة نهاية أو تدير خدمة خاصة بك، توقَّع زيادة في عدد الزيارات عندما تنقل أنت أو المطوّرون الخارجيون البيانات إلى الإصدار 1 من Reporting API (العنوان Reporting-Endpoints).
يمكنك متابعة القراءة للاطّلاع على التفاصيل وأمثلة على الرموز البرمجية.
تسجيل أخطاء الشبكة
سيتم تطوير آلية جديدة لتسجيل أخطاء الشبكة. بعد أن تصبح هذه الآلية الجديدة متاحة، يمكنك التبديل من الإصدار 0 من Reporting API إلى هذه الآلية الجديدة.
العرض التوضيحي والرمز
- الموقع التجريبي: واجهة برمجة التطبيقات الجديدة لإعداد التقارير (الإصدار 1)
- الرمز الخاص بالموقع الإلكتروني التجريبي
الاختلافات بين الإصدار 0 والإصدار 1
التغييرات
- تختلف مساحة واجهة برمجة التطبيقات.
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 في العناوين الأخرى للإشارة إلى مجموعات نقاط النهاية هذه.
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، يمكنك ضبط نقاط نهاية إعداد التقارير على بعض الردود فقط. ستستخدم المستندات (الصفحات) الأخرى على هذا المصدر نقاط النهاية المحيطة هذه تلقائيًا.
باستخدام الإصدار 1، عليك ضبط العنوان Reporting-Endpoints على جميع الردود التي قد تنشئ تقارير.
- تتيح كلتا واجهتَي برمجة التطبيقات أنواع التقارير نفسها، باستثناء نوع واحد: لا تتيح الإصدار 1 تقارير أخطاء الشبكة. يمكنك الاطّلاع على مزيد من المعلومات في خطوات نقل البيانات.
- الإصدار 0 غير متوافق ولن يكون متوافقًا مع جميع المتصفحات، بينما من المرجّح أن يكون الإصدار 1 متوافقًا مع عدة متصفحات في المستقبل.
ما لن يتغيّر
- لم يطرأ أي تغيير على تنسيق التقارير وبنيتها.
- يبقى الطلب الذي يرسله المتصفّح إلى نقطة النهاية طلب
POSTمنContent-typeapplication/reports+json. - تتوفّر إمكانية ربط نقاط نهاية معيّنة بأنواع تقارير معيّنة في كلّ من الإصدار 0 والإصدار 1.
- لم يتغيّر دور نقطة النهاية
default. لا يؤثر الإصدار 1 من Reporting API في
ReportingObserver. سيظل بإمكانReportingObserverالوصول إلى جميع التقارير القابلة للملاحظة، وسيكون تنسيقها متطابقًا.
جميع الاختلافات بين الإصدار 0 والإصدار 1
Legacy Reporting API (الإصدار 0)Report-To header |
New Reporting API (الإصدار 1)Reporting-Endpoints header |
|
|---|---|---|
| دعم المتصفح | الإصدار 69 من Chrome والإصدارات الأحدث والإصدار 69 من Edge والإصدارات الأحدث | الإصدار 96 من Chrome والإصدارات الأحدث والإصدار 96 من Edge والإصدارات الأحدث، ومتوافق مع Firefox لا يعترض Safari على ذلك. إشارات المتصفّح |
| نقاط النهاية | إرسال التقارير إلى أي من أدوات جمع التقارير المتعددة (يتم تحديد عناوين URL متعددة لكل مجموعة نقاط نهاية). | إرسال التقارير إلى أدوات جمع التقارير المحدّدة (يتم تحديد عنوان URL واحد فقط لكل نقطة نهاية) |
| مساحة عرض واجهة برمجة التطبيقات | يستخدم العنوان `Report-To` لإعداد مجموعات نقاط نهاية مُسمّاة. |
يستخدم عنوان `Reporting-Endpoints` لضبط نقاط نهاية مسماة. |
| أنواع التقارير التي يمكن إنشاؤها من خلال واجهة برمجة التطبيقات هذه |
|
لم يتغيّر أي شيء، باستثناء تسجيل أخطاء الشبكة (NEL): هذه الميزة غير متاحة في الإصدار الجديد من Reporting API (الإصدار 1). |
| نطاق التقرير | للمصدر. يؤثّر عنوان 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 API حاليًا وكنت بصدد إضافة وظيفة إعداد التقارير، استخدِم Reporting API الجديدة (الإصدار 1) (العنوان
Reporting-Endpoints). هناك استثناء واحد لهذه القاعدة: إذا كنت بحاجة إلى استخدام Network Error Logging، استخدِمReport-To(الإصدار 0). لا تتوافق ميزة Network Error Logging حاليًا مع الإصدار 1 من Reporting API. سيتم تطوير آلية جديدة لتسجيل أخطاء الشبكة، ولكن إلى أن تصبح متاحة، يمكنك استخدام الإصدار 0 من Reporting API. إذا كنت بحاجة إلى ميزة "تسجيل أخطاء الشبكة" إلى جانب أنواع التقارير الأخرى، استخدِم كلاً منReport-To(الإصدار 0) وReporting-Endpoints(الإصدار 1)، إذ يوفّر لك الإصدار 0 ميزة "تسجيل أخطاء الشبكة"، بينما يوفّر لك الإصدار 1 تقارير عن جميع الأنواع الأخرى.
خطوات نقل البيانات
هدف هذه العملية هو عدم فقدان التقارير التي كنت تحصل عليها باستخدام الإصدار 0.
الخطوة 1 (يجب تنفيذها الآن): استخدِم كلا العنوانَين:
Report-To(الإصدار 0) وReporting-Endpoints(الإصدار 1).من خلال ذلك، يمكنك الاستفادة مما يلي:
- تقارير من إصدارات أحدث من متصفّحَي Chrome وEdge بفضل
Reporting-Endpoints(الإصدار 1) - تقارير من إصدارات قديمة من متصفّحَي Chrome وEdge بفضل
Report-To(الإصدار 0)
ستستخدم مثيلات المتصفّح المتوافقة مع
Reporting-Endpointsهذه الميزة، وستستخدم المثيلات غير المتوافقة معهاReport-To.Reporting-Endpointsيكون تنسيق الطلب والتقرير هو نفسه في الإصدارَين 0 و1.- تقارير من إصدارات أحدث من متصفّحَي Chrome وEdge بفضل
الخطوة 2 (يجب تنفيذها الآن): تأكَّد من ضبط العنوان
Reporting-Endpointsعلى جميع الردود التي قد تنشئ تقارير.باستخدام الإصدار 0، يمكنك اختيار ضبط نقاط نهاية إعداد التقارير على بعض الردود فقط، وستستخدم المستندات (الصفحات) الأخرى على هذا المصدر نقطة النهاية "المحيطة" هذه. في الإصدار 1، وبسبب الاختلاف في النطاق، عليك ضبط العنوان
Reporting-Endpointsعلى جميع الردود التي قد تنشئ تقارير.الخطوة 3 (البدء لاحقًا): بعد أن يحدّث جميع المستخدمين أو معظمهم إلى الإصدارات الأحدث من Chrome أو Edge (الإصدار 96 والإصدارات الأحدث)، أزِل
Report-To(الإصدار 0) واحتفِظ فقط بـReporting-Endpoints.هناك استثناء واحد: إذا كنت بحاجة إلى تقارير Network Error Logging، احتفِظ بـ
Report-Toإلى أن يتوفّر آلية جديدة لخدمة Network Error Logging.
يمكنك الاطّلاع على أمثلة الرموز البرمجية في دليل نقل البيانات.
خطوات نقل بيانات تقارير CSP
هناك طريقتان يمكن من خلالهما ضبط تقارير انتهاك سياسة أمان المحتوى:
- باستخدام عنوان CSP وحده من خلال التوجيه
report-uriوهي متوافقة مع مجموعة كبيرة من المتصفّحات، بما في ذلك Chrome وFirefox وSafari وEdge. يتم إرسال التقارير مع نوع المحتوىapplication/csp-reportويكون لها تنسيق خاص بسياسة أمان المحتوى (CSP). يُطلق على هذه التقارير اسم "تقارير المستوى 2 من CSP" وهي لا تعتمد على 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 (يجب تنفيذها الآن): إذا لم تضِف
report-toبعد، أضِفها بجانبreport-uri. ستستخدم المتصفحات التي تتوافق معreport-uriفقط (Firefox) هذا التنسيق، بينما ستستخدم المتصفحات التي تتوافق أيضًا معreport-to(Chrome وEdge) هذا التنسيق.report-urireport-toلتحديد نقاط النهاية المسماة التي ستستخدمها فيreport-to، استخدِم كلا العنوانينReport-ToوReporting-Endpoints. يضمن ذلك حصولك على تقارير من كل من إصدارات Chrome وEdge القديمة والجديدة.الخطوة 3 (البدء لاحقًا): بعد أن يحدّث جميع المستخدمين أو معظمهم إلى الإصدارات الأحدث من Chrome أو Edge (الإصدار 96 والإصدارات الأحدث)، أزِل
Report-To(الإصدار 0) واحتفِظ فقط بـReporting-Endpoints. احتفِظreport-uriلكي تظل تتلقّى تقارير للمتصفّحات التي تتيح هذه الميزة فقط.
يمكنك الاطّلاع على أمثلة الرموز البرمجية لهذه الخطوات في نقل بيانات تقارير CSP.
عملية النقل: مثال على الرمز
نظرة عامة
إذا كنت تستخدم Reporting API القديمة (الإصدار 0) للحصول على تقارير عن الانتهاكات في COOP
(العنوان Cross-Origin-Opener-Policy) أو COEP (العنوان Cross-Origin-Embedder-Policy) أو سياسة المستندات
(العنوان Document-Policy)، لن تحتاج إلى تغيير عناوين السياسات هذه نفسها أثناء نقل البيانات إلى الإصدار 1 من Reporting API. ما عليك فعله هو الانتقال من عنوان Report-To القديم إلى عنوان Reporting-Endpoints الجديد.
إذا كنت تستخدم الإصدار القديم من Reporting API (الإصدار 0) للحصول على تقارير عن المخالفات في سياسة أمان المحتوى (CSP) (Content-Security-Policy header)، قد تحتاج إلى تعديل Content-Security-Policy كجزء من عملية نقل البيانات إلى الإصدار الجديد من Reporting API (الإصدار 1).
عملية النقل الأساسية
Report-To: { group: "main-endpoint", "endpoints": [ { "url": "https://reports.example/main" }] }, { group: "default-endpoint", "endpoints": [ { "url": "https://reports.example/default" }] }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 إلى أن تتوفّر بدائل لميزة "تسجيل أخطاء الشبكة".
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"إليك الشكل الذي يمكن أن يبدو عليه الرمز في المستقبل، بعد تحديث معظم برامج Chrome وEdge وتوفّر واجهة برمجة التطبيقات الإصدار 1.
يُرجى العِلم أنّه باستخدام الإصدار 1، سيظل بإمكانك إرسال أنواع تقارير محدّدة إلى نقاط نهاية محدّدة. ولكن يمكنك استخدام عنوان URL واحد فقط لكل نقطة نهاية.
مراقبة جميع الصفحات
app.get("/", (request, response) => { response.set("Report-To", …) response.render(...) }); app.get("/page1", (request, response) => { response.render(...) });
باستخدام الإصدار 0، يمكنك ضبط نقاط نهاية إعداد التقارير على بعض الردود فقط. تستخدم المستندات (الصفحات) الأخرى على هذا المصدر نقاط النهاية المحيطة هذه تلقائيًا. في هذه الحالة، يتم استخدام نقاط النهاية التي تم ضبطها لـ "/" في جميع الردود، مثلاً في page1.
// 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
Content-Security-Policy: ...; report-uri https://reports.example/mainلم يعُد يُنصح باستخدام report-uri فقط.
إذا كان الرمز يبدو كما هو موضّح أعلاه، عليك نقل البيانات. اطّلِع على أمثلة الرموز الجديدة أدناه (باللون الأخضر).
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، اطّلِع على أمثلة "الرمز الجديد" أدناه (باللون الأخضر).
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.
محتوى إضافي للقراءة
- مراقبة تطبيق الويب باستخدام Reporting API (المشاركة الرئيسية حول Reporting API)
- المواصفات: Reporting API القديمة (الإصدار 0)
- المواصفات: Reporting API الجديدة (الإصدار 1)
نتقدّم بالشكر الجزيل إلى "إيان كللاند" و"إيجي كيتامورا" و"ميليكا ميهايليا" على مراجعاتهم واقتراحاتهم بشأن هذه المقالة.