יש גרסה חדשה של Reporting API. הוא פרטי יותר, ויש סיכוי גבוה יותר שתהיה לו תמיכה בדפדפנים שונים.
Reporting API מעדכן אתכם על שגיאות שמתרחשות באתר בזמן שהמבקרים משתמשים בו. הוא מאפשר לראות מידע על התערבות בדפדפן, קריסות של הדפדפן, הפרות מדיניות של Content-Security-Policy, הפרות COOP/COEP, אזהרות על הוצאה משימוש ועוד.
יש גרסה חדשה של Reporting API. ה-API החדש פשוט יותר, וסביר יותר שהוא יהיה נתמך בדפדפנים שונים.
סיכום
מפתחי אתרים
אם כבר יש לכם פונקציונליות דיווח באתר: כדאי לעבור לגרסה 1 באמצעות הכותרת החדשה (Reporting-Endpoints
), אבל להשאיר את הכותרת מהדור הקודם למשך זמן מה (Report-To
). תוכלו לעיין במאמר העברה: קוד לדוגמה.
אם אתם מוסיפים פונקציונליות של דיווח לאתר עכשיו: השתמשו רק בכותרת החדשה (Reporting-Endpoints
).
⚠️ בשני המקרים, חשוב להגדיר את הכותרת Reporting-Endpoints
בכל התשובות שעשויות ליצור דוחות.
מפתחי שירותי דיווח
אם אתם מנהלים שירות של נקודת קצה או מפעילים שירות כזה, צפו לעלייה בנפח התנועה כשאתם או מפתחים חיצוניים תעברו ל-Reporting API v1 (כותרת Reporting-Endpoints
).
בהמשך מופיעים פרטים וקוד לדוגמה.
רישום שגיאות ברשת ביומן
יתפתח מנגנון חדש לרישום ביומן של שגיאות רשת. כשהמנגנון החדש יהיה זמין, תוכלו לעבור מ-Reporting API v0 למנגנון החדש.
הדגמה וקוד
- אתר הדגמה: Reporting API חדש (גרסה 1)
- קוד לאתר ההדגמה
ההבדלים בין גרסה 0 לגרסה 1
מה עומד להשתנות
- ממשק ה-API שונה.
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
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default" Document-Policy: ...; report-to main-endpoint
- היקף הדוח שונה.
בגרסה 0, אפשר להגדיר נקודות קצה לדיווח רק בתשובות מסוימות. מסמכים (דפים) אחרים במקור הזה ישתמשו באופן אוטומטי בנקודות הקצה הסביבתיות האלה.
בגרסה 1, צריך להגדיר את הכותרת Reporting-Endpoints
בכל התשובות שעשויות ליצור דוחות.
- שני ממשקי ה-API תומכים באותם סוגי דוחות, מלבד חריג אחד: בגרסה 1 אין תמיכה בדוחות של שגיאות ברשת. מידע נוסף זמין בשלבי ההעברה.
- אין ולא תהיה תמיכה ב-v0 בדפדפנים שונים. סביר להניח שבעתיד תהיה תמיכה ב-v1 במספר דפדפנים.
מה לא משתנה
- הפורמט והמבנה של הדוחות לא השתנו.
- הבקשה שנשלחת מהדפדפן לנקודת הקצה (endpoint) נשארת בקשת
POST
שלContent-type
application/reports+json
. - אפשר למפות נקודות קצה מסוימות לסוגים מסוימים של דוחות גם בגרסה v0 וגם בגרסה v1.
- התפקיד של נקודת הקצה
default
לא משתנה. ל-Reporting API v1 אין השפעה על
ReportingObserver
. ל-ReportingObserver
תמשיך להיות גישה לכל הדוחות שניתנים לצפייה, והפורמט שלהם יהיה זהה.
כל ההבדלים בין גרסה 0 לגרסה 1
Reporting API מדור קודם (גרסה 0) כותרת Report-To |
Reporting API חדש (גרסה 1)Reporting-Endpoints כותרת |
|
---|---|---|
תמיכה בדפדפנים | Chrome מגרסה 69 ואילך ו-Edge מגרסה 69 ואילך. | Chrome מגרסה 96 ואילך ו-Edge מגרסה 96 ואילך. יש תמיכה גם ב-Firefox. אין ל-Safari התנגדות. הצגת האותות מהדפדפן. |
נקודות קצה | שולחת דוחות לכל מספר אוספים של דוחות (מוגדרות כמה כתובות URL לכל קבוצה של נקודות קצה). | שליחת דוחות לאוספים ספציפיים של דוחות (רק כתובת URL אחת מוגדרת לכל נקודת קצה). |
ממשק API | הכותרת `Report-To` משמשת להגדרת קבוצות של נקודות קצה בעלות שם. |
הכותרת `Reporting-Endpoints` משמשת להגדרת נקודות קצה בעלות שם. |
סוגי הדוחות שאפשר ליצור באמצעות ה-API הזה |
|
ללא שינוי, למעט מ-Network Error Logging (NEL): תכונה זו לא נתמכת ב-Reporting API החדש (v1). |
היקף הדוח | מקור. הכותרת Report-To של מסמך משפיעה על מסמכים (דפים) אחרים מאותו מקור.
השדה url בדוח עדיין משתנה לפי מסמך.
|
מסמך. הכותרת Reporting-Endpoints של מסמך משפיעה רק על המסמך הזה.
השדה url בדוח עדיין משתנה לפי מסמך.
|
בידוד דוחות (קיבוץ) | מסמכים (דפים) או אתרים/מקורות שונים שיוצרים דוח בערך באותו זמן ויש להם את אותו נקודת קצה לדיווח יקובצו יחד: הם יישלחו באותה הודעה לנקודת הקצה לדיווח. |
|
תמיכה באיזון עומסים / עדיפויות | כן | לא |
מפתחי נקודות קצה: צפוי עלייה בנפח התנועה
אם הגדרתם שרת משלכם בתור נקודת קצה לדיווח, או אם אתם מפתחים או מטפלים באיסוף דוחות בתור שירות, צפויה עלייה בנפח התנועה לנקודת הקצה הזו.
הסיבה לכך היא שדוחות לא מקובצים ב-Reporting API v1 כמו שהם מקובצים ב-Reporting API v0. לכן, כשמפתחי אפליקציות יתחילו לעבור ל-Reporting API v1, מספר הדוחות יישאר דומה אבל נפח הבקשות לשרת נקודת הקצה יגדל.
מפתחי אפליקציות: העברה אל Reporting-Endpoints
(v1)
מה עליך לעשות?
יש כמה יתרונות לשימוש ב-Reporting API החדש (גרסה 1): ✅
- אותות בדפדפן הם חיוביים, כלומר צפויה תמיכה בדפדפנים שונים ב-v1 (בניגוד ל-v0 שנתמכת רק ב-Chrome וב-Edge).
- ממשק ה-API מצומצם יותר.
- אנחנו מפתחים את הכלים בהתאם לגרסה החדשה של Reporting API (גרסה 1).
לכן:
- אם באתר שלכם כבר נעשה שימוש ב-Reporting API v0 עם הכותרת
Report-To
, עליכם לעבור ל-Reporting API v1 (ראו שלבי ההעברה). אם האתר שלכם כבר משתמש בפונקציונליות של דיווח על הפרות של Content-Security-Policy, כדאי לעיין בשלבי ההעברה הספציפיים לדיווח על CSP. - אם עדיין לא השתמשתם ב-Reporting API באתר ואתם מוסיפים עכשיו פונקציונליות של דיווח: צריך להשתמש ב-Reporting API החדש (גרסה 1) (כותרת
Reporting-Endpoints
). למקרה הזה יש יוצא מן הכלל: אם אתם צריכים להשתמש ב-Network Error Logging, משתמשים ב-Report-To
(v0). אי אפשר כרגע לבצע רישום של שגיאות רשת ביומן Google Reporting API v1. אנחנו פיתוח מנגנון חדש לרישום שגיאות רשת⏤ עד שהוא יהיה זמין ומשתמשים ב-Reporting API v0. אם אתם צריכים את Network Error Logging לצד סוגי דוחות אחרים, השתמשו גםReport-To
(v0) וגםReporting-Endpoints
(v1). v0 נותן לכם Network Error Logging ו-v1 נותנת לכם דוחות מכל הסוגים האחרים.
שלבי ההעברה
היעד שלכם בהעברה הזו הוא לא לאבד את הדוחות שהשתמשתם בהם בגרסה 0.
שלב 1 (עכשיו): משתמשים בשני הכותרות:
Report-To
(v0) ו-Reporting-Endpoints
(v1).כך תוכלו:
- דוחות מלקוחות חדשים יותר של Chrome ו-Edge, בזכות
Reporting-Endpoints
(v1). - דוחות מלקוחות ישנים יותר של Chrome ו-Edge, בזכות
Report-To
(v0).
מכונות דפדפן שתומכות ב-
Reporting-Endpoints
ישתמשו ב-Reporting-Endpoints
, ומכונות שלא תומכות ב-Reporting-Endpoints
יחזרו ל-Report-To
. הפורמט של הבקשה והדוח זהה בגרסה v0 ובגרסה v1.- דוחות מלקוחות חדשים יותר של Chrome ו-Edge, בזכות
שלב 2 (עכשיו): מוודאים שהכותרת
Reporting-Endpoints
מוגדרת בכל התשובות שעשויות ליצור דוחות.בגרסה 0, אפשר להגדיר נקודות קצה לדיווח בתגובות מסוימות בלבד, ומסמכים אחרים (דפים) במקור הזה ישתמשו בנקודת הקצה 'הסביבתית' הזו. בגרסה 1, בגלל ההבדל בהיקף, צריך להגדיר את הכותרת
Reporting-Endpoints
בכל התשובות שעשויות ליצור דוחות.שלב 3 (התחלה מאוחר יותר): אחרי שכל המשתמשים או רוב המשתמשים עדכנו לגרסאות מאוחרות יותר של Chrome או Edge (96 ואילך), מסירים את
Report-To
(v0) ומשאירים רקReporting-Endpoints
.יש חריג אחד: אם אתם צריכים דוחות של רישום שגיאות ברשת, כדאי להשאיר את
Report-To
עד שיהיה מנגנון חדש לרישום שגיאות ברשת.
דוגמאות לקוד זמינות בספר המתכונים להעברה.
שלבי ההעברה של דיווח CSP
יש שתי דרכים שבהן ניתן להגדיר דוחות הפרות של Content-Security-Policy:
- באמצעות כותרת ה-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
) לא מומלץ יותר ולשימוש בגישה השנייה יש כמה יתרונות. באופן ספציפי, התכונה הזו מאפשרת להשתמש באותה דרך שבה אפשר להגדיר דיווח לכל סוגי הדוחות, וגם להגדיר נקודת קצה (endpoint) גנרית (כי כל הבקשות לדוחות שנוצרות דרך 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-uri
, ובדפדפנים שתומכים גם ב-report-to
(Chrome, Edge) נעשה שימוש ב-report-to
. כדי לציין את נקודות הקצה בעלות השם שבהן משתמשים ב-report-to
, צריך להשתמש בשתי הכותרותReport-To
וגם ב-Reporting-Endpoints
. כך תוכלו לקבל דוחות גם מלקוחות Chrome ו-Edge ישנים וגם מלקוחות חדשים.שלב 3 (מתחילים מאוחר יותר): אחרי שכל המשתמשים או רובם יעדכנו להתקנות מאוחרות יותר של Chrome או Edge (גרסה 96 ואילך), מסירים את
Report-To
(v0) ושומרים רק אתReporting-Endpoints
. משאירים אתreport-uri
כדי להמשיך לקבל דוחות בדפדפנים שתומכים רק בו.
דוגמאות לקוד של השלבים האלה מפורטות במאמר העברת דיווח של שותף עצמאי לדיווח (CSP).
מיגרציה: קוד לדוגמה
סקירה כללית
אם אתם משתמשים ב-Reporting API הקודם (גרסה 0) כדי לקבל דוחות על הפרות של שיתוף פעולה עסקי (COOP) (כותרת Cross-Origin-Opener-Policy
), של שיתוף פעולה עסקי משופר (COEP) (Cross-Origin-Embedder-Policy
) או של מדיניות מסמך (כותרת Document-Policy
): אין צורך לשנות את כותרות המדיניות האלה בעצמן במהלך המעבר ל-Reporting API גרסה 1. מה שכן צריך לעשות הוא לעבור מהכותרת הקודמת Report-To
לכותרת החדשה Reporting-Endpoints
.
אם אתם משתמשים ב-Reporting API הקודם (גרסה 0) כדי לקבל דוחות על הפרות של CSP (כותרת Content-Security-Policy
), יכול להיות שתצטרכו לשנות את 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" }] }
Reporting-Endpoints: main-endpoint="https://reports.example/main", default="https://reports.example/default"
שימו לב שבגרסה 1 עדיין אפשר לשלוח סוגים ספציפיים של דוחות אל נקודות קצה ספציפיות. אבל אפשר להגדיר רק כתובת URL אחת לכל נקודת קצה.
צפייה בכל הדפים
app.get("/", (request, response) => { response.set("Report-To", …) response.render(...) }); app.get("/page1", (request, response) => { response.render(...) });
// 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(...) });
העברת דיווח של ספקי שירות מנוהלים
Content-Security-Policy: ...; report-uri https://reports.example/main
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint Report-To: main-endpoint="https://reports.example/main"
Content-Security-Policy: ...; report-uri https://reports.example/main; report-to main-endpoint Reporting-Endpoints: main-endpoint="https://reports.example/main" Report-To: ...
קריאה נוספת
- מעקב אחרי אפליקציית האינטרנט באמצעות Reporting API (הפוסט הראשי בנושא Reporting API)
- מפרט: Reporting API מדור קודם (גרסה 0)
- מפרט: Reporting API החדש (גרסה 1)
תודה רבה ל-Ian Clelland, ל-Eiji Kitamura ול-Milica Mihajlija על הביקורות וההצעות שלהם לגבי המאמר הזה.