בעיות נפוצות ובאגים בדיווח

אם נתקלתם בבעיה שקשורה בדחיפת דף אינטרנט, יכול להיות קשה לנפות את הבאגים שגרמו לבעיה, למצוא עזרה. במסמך הזה מפורטות כמה מהבעיות הנפוצות והפעולות שצריך לבצע אם מצאת באג ב-Chrome או ב-Firefox.

לפני שנתעמק לדחיפת ניפוי באגים, ייתכן שיש בעיות בניפוי באגים על ידי עובדי שירות עצמם, הקובץ לא מתעדכן, נכשל בהרשמה או בדרך כלל מדובר בהתנהגות חריגה. קיימת מסמך מדהים בנושא עובדי שירות לניפוי באגים אני ממליץ מאוד לבדוק אם אתם חדשים של Service Worker.

יש שני שלבים ייחודיים שצריך לבדוק במהלך הפיתוח והבדיקה של דחיפת הודעות מדפי אינטרנט, לכל אחת יש רשימה של בעיות נפוצות:

  • שליחת הודעה: מוודאים ששליחת ההודעות בוצעה בהצלחה. אתם אמורים לקבל קוד HTTP 201. אם לא :
    • בודקים אם יש שגיאות הרשאה: אם מקבלים הרשאה בהודעת השגיאה. הקטע 'בעיות בהרשאות'.
    • שגיאות אחרות ב-API: אם קיבלתם תגובה עם קוד סטטוס שאינו 201, בקטע 'קודי מצב HTTP' תוכלו לקרוא מידע נוסף, הנחיות לגבי הגורם לבעיה.
  • קבלת הודעה: אם אתם מצליחים לשלוח הודעה, אבל ההודעה לא התקבלה בדפדפן:

אם אין לכם אפשרות לשלוח ולקבל הודעה בדחיפה ואת הקטעים הרלוונטיים במסמך הזה לא עוזרים לנפות את הבאגים שגרמו לבעיה. ייתכן במנגנון הדחיפה עצמו. במקרה כזה, עיינו ב הגדלת דוחות על באגים כדי לדווח על באג טוב ולכלול את כל המידע הנדרש כדי להאיץ תהליך תיקון הבאגים.

דבר אחד שאני רוצה להדגיש לפני שנתחיל הוא שFirefox יש הודעות שגיאה מעולות ב-Mozilla AutoPush Service. אם נתקעים לא בטוחים מה הבעיה, אז בצעו בדיקה ב-Firefox לקבל הודעת שגיאה מועילה יותר.

בעיות בהרשאות

בעיות בהרשאות הן אחת מהבעיות הנפוצות ביותר שמפתחים נתקלים בהן דחיפת דפי אינטרנט. בדרך כלל זו בעיה בהגדרות של מפתחות שרת האפליקציות (שנקראים גם מפתחות VAPID) של האתר .

הדרך הקלה ביותר לתמוך ב-push גם ב-Firefox וגם ב-Chrome היא לספק applicationServerKey בשיחה subscribe(). הצד הקדמי הוא כל אי-התאמה בין המפתחות של ממשק הקצה לבין המפתחות של השרת תגרום שגיאת הרשאה.

ב-Chrome וב-FCM

ב-Chrome, שמשתמש ב-FCM בתור שירות Push, תקבלו תשובה אחת (UnauthorizedRegistration) מ-FCM למגוון שכולן קשורות למפתחות של שרת האפליקציות.

תתקבל שגיאה UnauthorizedRegistration באחת מהאפשרויות הבאות מצבים:

  • אם לא מגדירים כותרת Authorization בבקשה ל-FCM.
  • מפתח האפליקציה שמשמש לרישום המשתמש לא תואם למפתח שבו נעשה שימוש כדי לחתום על הכותרת Authorization.
  • התפוגה לא חוקית ב-JWT. כלומר, היא חורגת מ-24 שעות פג התוקף של ה-JWT.
  • פורמט ה-JWT שגוי או שיש בו ערכים לא חוקיים.

תגובת השגיאה המלאה נראית כך:

<html>
  <head>
    <title>UnauthorizedRegistration</title>
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    <h1>UnauthorizedRegistration</h1>

    <h2>Error 400</h2>
  </body>
</html>

אם הודעת השגיאה הזו מופיעה ב-Chrome, כדאי לבצע בדיקה ב-Firefox כדי לראות אם הוא יספק תובנה טובה יותר לבעיה.

דחיפה אוטומטית של Firefox ו-Mozilla

Firefox ו-Mozilla AutoPush מספקות מגוון הודעות שגיאה עבור Authorization בעיות.

תישלח גם הודעת שגיאה Unauthorized מאת Mozilla AutoPush אם הכותרת Authorization לא נכללת בדחיפה בקשה.

{
  "errno": 109,
  "message": "Request did not validate missing authorization header",
  "code": 401,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Unauthorized"
}

אם פג התוקף של תאריך התפוגה ב-JWT, מקבלים גם השגיאה Unauthorized עם הודעה שמסבירה שהאסימון פג תוקף.

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid bearer token: Auth expired"
}

אם המפתחות של שרת האפליקציות שונים מהזמן שבו המשתמש נרשמת וכשכותרת ההרשאה נחתמה, Not Found תוחזר שגיאה:

{
  "errno": 102,
  "message": "Request did not validate invalid token",
  "code": 404,
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "error": "Not Found"
}

לבסוף, אם יש ערך לא חוקי ב-JWT (לדוגמה, אם הערך Alg) הוא ערך לא צפוי), תקבל את השגיאה הבאה מ-Mozilla דחיפה אוטומטית:

{
  "code": 401,
  "errno": 109,
  "error": "Unauthorized",
  "more_info": "http://autopush.readthedocs.io/en/latest/http.html#error-codes",
  "message": "Request did not validate Invalid Authorization Header"
}

קודי מצב HTTP

יש מגוון בעיות שעלולות לגרום לקוד תגובה שאינו 201 שירותי דחיפה. בהמשך מופיעה רשימה של קודי מצב HTTP והמשמעות שלהם ביחס לדחיפת דפי אינטרנט.

קוד סטטוס תיאור
429 נשלחו יותר מדי בקשות. שרת האפליקציות שלך הגיע להגבלת קצב של יצירת בקשות עם שירות דחיפה. התגובה מהשירות צריכה לכלול 'Retry-After' כותרת אל לציין כמה זמן לפני שאפשר יהיה לשלוח בקשה נוספת.
400 בקשה לא חוקית. אחת מהכותרות אינה חוקית או בפורמט שגוי.
404 לא נמצא. במקרה זה עליך למחוק את ה-PushSubscription קצה עורפי ולהמתין להזדמנות לרשום את המשתמש מחדש.
410 נעלם. המינוי כבר לא בתוקף ויש להסיר אותו הקצה העורפי. אפשר לשחזר את הפעולה הזו על ידי קריאה ל-'unsubscribe() ' `PushSubscription`.
413 המטען הייעודי (Payload) גדול מדי. המטען הייעודי (payload) בגודל המינימלי ששירות דחיפה חייב התמיכה היא 4,096 בייטים (או 4kb). כל ערך גדול יותר עלול לגרום לשגיאה הזו.

אם קוד מצב ה-HTTP לא מופיע ברשימה הזו והודעת השגיאה לא מופיעה שימושי, כדאי לעיין ב-Web Push Protocol המפרט כדי לבדוק אם יש הפניה לקוד הסטטוס יחד עם תרחיש שמציג מתי קוד הסטטוס הזה יכול .

בעיה בהצפנת המטען הייעודי (Payload)

אם תצליחו להפעיל הודעת דחיפה (כלומר, לשלוח הודעה לאינטרנט) דחיפת שירות וקבלת קוד תגובה 201), אבל אירוע הדחיפה אף פעם לא מופעל ב-Service worker, זה בדרך כלל מצביע על כך שהדפדפן נכשל לפענח את ההודעה שהתקבלה.

במקרה כזה, אמורה להופיע הודעת שגיאה בכלי הפיתוח של Firefox מסוף כמו:

כלי פיתוח ל-Firefox עם הודעת פענוח.

כדי לבדוק אם זו הבעיה ב-Chrome, מבצעים את הפעולות הבאות:

  1. עוברים אל about://gcm-internals ולוחצים על "Start Recording" (התחלת ההקלטה). לחצן.

רשומה פנימית של Chrome GCM.

  1. מפעילים הודעת Push ומחפשים ביומן כשל בפענוח ההודעה.

יומן פענוח פנימי של GCM.

אם יש בעיה בפענוח המטען הייעודי (Payload), תופיע הודעת שגיאה. דומה לזו שמוצגת למעלה. (שימו לב לAES-GCM decryption failed הודעה בעמודת הפרטים.)

אם זו הבעיה, יש כמה כלים שיכולים לעזור לנפות באגים בהצפנה:

בעיה בחיבור

אם אתם לא מקבלים אירוע Push ב-Service Worker ואתם לא מקבלים מופיעות שגיאות פענוח, ייתכן שהדפדפן לא מצליח להתחבר שירותי דחיפה.

ב-Chrome, ניתן לבדוק אם הדפדפן מקבל הודעות 'קבלת יומן הודעות' (sic) ב-about://gcm-internals.

גורמים פנימיים של GCM מקבלים יומן הודעות.

אם ההודעה לא תגיע בזמן, צריך לוודא סטטוס החיבור של הדפדפן הוא CONNECTED:

מצב החיבור הפנימי של GCM.

אם הסטטוס לא 'מחובר', אולי צריך למחוק את הפרופיל הנוכחי. ליצור חשבון חדש. אם זה עדיין לא פותר את הבעיה, אפשר לשלוח דוח על באג כפי שמוצע למטה.

הגדלת דוחות על באגים

אם אף אחת מהאפשרויות שלמעלה לא עוזרת לבעיה שלך ואין שום סימן יכולה להיות בעיה, יש לדווח על הבעיה בדפדפן בעיה עם:

לגבי Chrome, עליך להעלות את הבעיה כאן: https://bugs.chromium.org/p/chromium/issues/list ב-Firefox, יש לדווח על הבעיה בנושאים הבאים: https://bugzilla.mozilla.org/

כדי לספק דוח טוב על באג, צריך לספק את הפרטים הבאים:

  • דפדפנים שבדקת בהם (למשל: Chrome גרסה 50, גרסת Chrome 51, Firefox גרסה 50, Firefox גרסה 51).
  • דוגמה PushSubscription שממחישה את הבעיה.
  • יש לכלול כל בקשה לדוגמה (כלומר, תוכן של בקשות רשת לדחיפה כולל כותרות).
  • יש לכלול גם תגובות לדוגמה מבקשות רשת.

אם אתם יכולים לספק דוגמה שניתנת לשחזור, קוד מקור או אתר אינטרנט מתארח הוא מזרז את האבחון ופתרון הבעיה.

מה השלב הבא?

שיעורי Lab קוד