وقتی با فشار وب به مشکلی برخورد میکنید، اشکالزدایی آن مشکل یا یافتن راهنما میتواند دشوار باشد. این سند به تشریح برخی از مشکلات رایج و کارهایی که باید در صورت یافتن باگ در کروم یا فایرفاکس انجام دهید، می پردازد.
قبل از اینکه به سراغ فشار اشکالزدایی برویم، ممکن است مشکلاتی با خود کارکنان سرویس اشکالزدایی، بهروزرسانی نشدن فایل، ثبت نام نکردن یا به طور کلی رفتار غیرعادی داشته باشید. یک سند عالی در مورد عیبیابی کارگران خدمات وجود دارد که من به شدت توصیه میکنم آن را بررسی کنید که آیا در توسعه کارگران خدماتی تازه کار هستید.
هنگام توسعه و آزمایش فشار وب، دو مرحله متمایز وجود دارد که هر کدام مجموعه ای از مسائل/مشکلات مشترک خاص خود را دارند:
- ارسال پیام: مطمئن شوید که ارسال پیام با موفقیت انجام شده است. شما باید یک کد HTTP 201 دریافت کنید. اگر نیستید:
- خطاهای مجوز را بررسی کنید: اگر یک پیام خطای مجوز دریافت کردید به بخش مسائل مجوز مراجعه کنید.
- سایر خطاهای API: اگر پاسخ کد وضعیت غیر 201 را دریافت کردید، برای راهنمایی در مورد علت مشکل به بخش کدهای وضعیت HTTP مراجعه کنید.
- دریافت پیام : اگر میتوانید پیامی را با موفقیت ارسال کنید، اما پیام در مرورگر دریافت نشد:
- بررسی مشکلات رمزگذاری: به بخش مشکل رمزگذاری Payload مراجعه کنید.
- بررسی مشکلات اتصال: اگر مشکل در کروم است، ممکن است یک اتصال باشد. برای اطلاعات بیشتر به بخش مشکلات اتصال مراجعه کنید.
اگر قادر به ارسال و دریافت پیام فشار نیستید و بخشهای مربوطه در این سند به رفع اشکال کمک نمیکنند، ممکن است در خود مکانیزم فشار باگای پیدا کرده باشید. در این صورت به بخش Raising Bug Reports مراجعه کنید تا یک گزارش باگ خوب با تمام اطلاعات لازم برای تسریع در روند رفع اشکال ثبت کنید.
یکی از مواردی که میخواهم قبل از شروع به کار بگویم این است که فایرفاکس و سرویس فشار خودکار موزیلا پیامهای خطای بزرگی دارند. اگر گیر کردید و مطمئن نیستید که مشکل چیست، در فایرفاکس تست کنید و ببینید آیا پیام خطای مفیدتری دریافت می کنید.
مسائل مربوط به مجوز
مسائل مربوط به مجوز یکی از رایج ترین مشکلاتی است که توسعه دهندگان هنگام شروع کار با فشار وب با آن مواجه می شوند. این معمولاً یک مشکل در پیکربندی کلیدهای سرور کاربردی سایت (با نام مستعار کلیدهای VAPID) است.
ساده ترین راه برای پشتیبانی از push در فایرفاکس و کروم، ارائه یک applicationServerKey
در فراخوانی subscribe()
است. نکته منفی این است که هر گونه اختلاف بین کلیدهای جلویی شما و سرور منجر به خطای مجوز می شود.
در کروم و FCM
برای Chrome، که از FCM به عنوان یک سرویس فشار استفاده میکند، یک پاسخ UnauthorizedRegistration
از FCM برای طیف وسیعی از خطاها دریافت خواهید کرد که همگی شامل کلیدهای سرور برنامه هستند.
در هر یک از شرایط زیر یک خطای UnauthorizedRegistration
دریافت خواهید کرد:
- اگر نتوانستید یک عنوان
Authorization
را در درخواست به FCM تعریف کنید. - کلید برنامه مورد استفاده شما برای اشتراک کاربر با کلید مورد استفاده برای امضای سرصفحه مجوز مطابقت ندارد.
- انقضا در JWT شما نامعتبر است، یعنی انقضا بیش از 24 ساعت است یا JWT منقضی شده است.
- JWT نادرست است یا مقادیر نامعتبری دارد.
پاسخ کامل خطا به این صورت است:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
اگر این پیغام خطا را در کروم دریافت کردید، در فایرفاکس تست کنید تا ببینید آیا بینش بیشتری از مشکل ارائه می دهد یا خیر.
Firefox و Mozilla AutoPush
فایرفاکس و Mozilla AutoPush مجموعه ای دوستانه از پیام های خطا را برای مسائل Authorization
ارائه می کنند.
همچنین اگر سرصفحه Authorization
در درخواست فشار شما گنجانده نشده باشد، یک پاسخ خطای Unauthorized
از Mozilla AutoPush دریافت خواهید کرد.
{
"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 AutoPush دریافت خواهید کرد:
{
"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 | درخواست های خیلی زیاد سرور برنامه شما با یک سرویس فشار به حداکثر نرخ رسیده است. پاسخ سرویس باید شامل سرصفحه «تعداد مجدد پس از» باشد تا نشان دهد چه مدت قبل از درخواست دیگری میتوان انجام داد. |
400 | درخواست نامعتبر یکی از هدرهای شما نامعتبر است یا قالب بندی ضعیفی دارد. |
404 | یافت نشد. در این صورت باید PushSubscription را از قسمت پشتی خود حذف کنید و منتظر فرصتی برای اشتراک مجدد کاربر باشید. |
410 | رفته اشتراک دیگر معتبر نیست و باید از قسمت پشتی شما حذف شود. این را می توان با فراخوانی 'unsubscribe()' در 'PushSubscription' بازتولید کرد. |
413 | اندازه بار بسیار بزرگ است. حداقل اندازه باری که یک سرویس فشار باید پشتیبانی کند 4096 بایت (یا 4 کیلوبایت) است. هر چیزی بزرگتر می تواند منجر به این خطا شود. |
اگر کد وضعیت HTTP در این لیست نیست و پیام خطا مفید نیست، مشخصات پروتکل Web Push را بررسی کنید تا ببینید آیا کد وضعیت به همراه سناریویی از زمان استفاده از آن کد وضعیت ارجاع داده شده است یا خیر.
مشکل رمزگذاری بار
اگر بتوانید یک پیام فشار را با موفقیت راه اندازی کنید (یعنی پیامی را به یک سرویس فشار وب ارسال کنید و کد پاسخ 201 را دریافت کنید) اما رویداد فشار هرگز در سرویس کار شما فعال نمی شود، این معمولاً نشان می دهد که مرورگر در رمزگشایی پیامی که دریافت کرده است شکست خورده است.
اگر چنین است، باید یک پیام خطا در کنسول DevTools فایرفاکس مشاهده کنید:
برای بررسی اینکه آیا این مشکل در کروم است، موارد زیر را انجام دهید:
- به about://gcm-internals بروید و روی دکمه «شروع ضبط» کلیک کنید.
- یک پیام فشار را راه اندازی کنید و به زیر "گزارش شکست رمزگشایی پیام" نگاه کنید.
اگر مشکلی در رمزگشایی محموله وجود داشته باشد، خطای مشابهی را مشاهده خواهید کرد که در بالا نشان داده شده است. (به پیام AES-GCM decryption failed
در ستون جزئیات توجه کنید.)
در صورت بروز مشکل، چند ابزار وجود دارد که ممکن است به رفع اشکال رمزگذاری کمک کند:
مشکل اتصال
اگر رویداد فشاری را در سرویسکار خود دریافت نمیکنید و هیچ خطای رمزگشایی نمیبینید، ممکن است مرورگر به سرویس فشار متصل نشود.
در Chrome، میتوانید با بررسی «گزارش دریافت پیام» (sic) در about://gcm-internals
بررسی کنید که آیا مرورگر پیامها را دریافت میکند یا خیر.
اگر پیام را به موقع نمی بینید، مطمئن شوید که وضعیت اتصال مرورگر شما CONNECTED
است:
اگر "متصل" نیست ، ممکن است لازم باشد نمایه فعلی خود را حذف کرده و یک نمایه جدید ایجاد کنید . اگر باز هم مشکل را حل نکرد، لطفاً گزارش اشکال را همانطور که در زیر پیشنهاد میشود، مطرح کنید.
افزایش گزارش اشکال
اگر هیچ یک از موارد بالا به مشکل شما کمک نمی کند و هیچ نشانه ای از مشکل وجود ندارد، لطفاً مشکلی را در مورد مرورگری که با آن مشکل دارید مطرح کنید:
برای کروم، باید این مشکل را در اینجا مطرح کنید: https://bugs.chromium.org/p/chromium/issues/list برای فایرفاکس، باید این مشکل را در این آدرس مطرح کنید: https://bugzilla.mozilla.org/
برای ارائه یک گزارش اشکال خوب، باید جزئیات زیر را ارائه دهید:
- مرورگرهایی که در آنها آزمایش کرده اید (به عنوان مثال کروم نسخه 50، کروم نسخه 51، فایرفاکس نسخه 50، فایرفاکس نسخه 51).
- نمونه ای از
PushSubscription
که مشکل را نشان می دهد. - هر گونه درخواست نمونه (به عنوان مثال محتوای درخواست های شبکه به یک سرویس فشار، از جمله هدر) را درج کنید.
- هر گونه پاسخ نمونه از درخواست های شبکه را نیز درج کنید.
اگر بتوانید یک مثال قابل تکرار، چه کد منبع یا یک وب سایت میزبانی شده ارائه دهید، اغلب تشخیص و حل مشکل را سرعت می بخشد.
بعد کجا بریم
- مروری بر اعلان فشار وب
- چگونه فشار کار می کند
- اشتراک کاربر
- مجوز UX
- ارسال پیام با کتابخانه های وب Push
- پروتکل فشار وب
- مدیریت رویدادهای فشاری
- نمایش اعلان
- رفتار اطلاع رسانی
- الگوهای اعلان رایج
- سوالات متداول Push Notifications
- مشکلات رایج و گزارش اشکالات
آزمایشگاه های کد
،وقتی با فشار وب به مشکلی برخورد میکنید، اشکالزدایی آن مشکل یا یافتن راهنما میتواند دشوار باشد. این سند به تشریح برخی از مشکلات رایج و کارهایی که باید در صورت یافتن باگ در کروم یا فایرفاکس انجام دهید، می پردازد.
قبل از اینکه به سراغ فشار اشکالزدایی برویم، ممکن است مشکلاتی با خود کارکنان سرویس اشکالزدایی، بهروزرسانی نشدن فایل، ثبت نام نکردن یا به طور کلی رفتار غیرعادی داشته باشید. یک سند عالی در مورد عیبیابی کارگران خدمات وجود دارد که من به شدت توصیه میکنم آن را بررسی کنید که آیا در توسعه کارگران خدماتی تازه کار هستید.
هنگام توسعه و آزمایش فشار وب، دو مرحله متمایز وجود دارد که هر کدام مجموعه ای از مسائل/مشکلات مشترک خاص خود را دارند:
- ارسال پیام: مطمئن شوید که ارسال پیام با موفقیت انجام شده است. شما باید یک کد HTTP 201 دریافت کنید. اگر نیستید:
- خطاهای مجوز را بررسی کنید: اگر یک پیام خطای مجوز دریافت کردید به بخش مسائل مجوز مراجعه کنید.
- سایر خطاهای API: اگر پاسخ کد وضعیت غیر 201 را دریافت کردید، برای راهنمایی در مورد علت مشکل به بخش کدهای وضعیت HTTP مراجعه کنید.
- دریافت پیام : اگر میتوانید پیامی را با موفقیت ارسال کنید، اما پیام در مرورگر دریافت نشد:
- بررسی مشکلات رمزگذاری: به بخش مشکل رمزگذاری Payload مراجعه کنید.
- بررسی مشکلات اتصال: اگر مشکل در کروم است، ممکن است یک اتصال باشد. برای اطلاعات بیشتر به بخش مشکلات اتصال مراجعه کنید.
اگر قادر به ارسال و دریافت پیام فشار نیستید و بخشهای مربوطه در این سند به رفع اشکال کمک نمیکنند، ممکن است در خود مکانیزم فشار باگای پیدا کرده باشید. در این صورت به بخش Raising Bug Reports مراجعه کنید تا یک گزارش باگ خوب با تمام اطلاعات لازم برای تسریع در روند رفع اشکال ثبت کنید.
یکی از مواردی که میخواهم قبل از شروع به کار بگویم این است که فایرفاکس و سرویس فشار خودکار موزیلا پیامهای خطای بزرگی دارند. اگر گیر کردید و مطمئن نیستید که مشکل چیست، در فایرفاکس تست کنید و ببینید آیا پیام خطای مفیدتری دریافت می کنید.
مسائل مربوط به مجوز
مسائل مربوط به مجوز یکی از رایج ترین مشکلاتی است که توسعه دهندگان هنگام شروع کار با فشار وب با آن مواجه می شوند. این معمولاً یک مشکل در پیکربندی کلیدهای سرور کاربردی سایت (با نام مستعار کلیدهای VAPID) است.
ساده ترین راه برای پشتیبانی از push در فایرفاکس و کروم، ارائه یک applicationServerKey
در فراخوانی subscribe()
است. نکته منفی این است که هر گونه اختلاف بین کلیدهای جلویی شما و سرور منجر به خطای مجوز می شود.
در کروم و FCM
برای Chrome، که از FCM به عنوان یک سرویس فشار استفاده میکند، یک پاسخ UnauthorizedRegistration
از FCM برای طیف وسیعی از خطاها دریافت خواهید کرد که همگی شامل کلیدهای سرور برنامه هستند.
در هر یک از شرایط زیر یک خطای UnauthorizedRegistration
دریافت خواهید کرد:
- اگر نتوانستید یک عنوان
Authorization
را در درخواست به FCM تعریف کنید. - کلید برنامه مورد استفاده شما برای اشتراک کاربر با کلید مورد استفاده برای امضای سرصفحه مجوز مطابقت ندارد.
- انقضا در JWT شما نامعتبر است، یعنی انقضا بیش از 24 ساعت است یا JWT منقضی شده است.
- JWT نادرست است یا مقادیر نامعتبری دارد.
پاسخ کامل خطا به این صورت است:
<html>
<head>
<title>UnauthorizedRegistration</title>
</head>
<body bgcolor="#FFFFFF" text="#000000">
<h1>UnauthorizedRegistration</h1>
<h2>Error 400</h2>
</body>
</html>
اگر این پیغام خطا را در کروم دریافت کردید، در فایرفاکس تست کنید تا ببینید آیا بینش بیشتری از مشکل ارائه می دهد یا خیر.
Firefox و Mozilla AutoPush
فایرفاکس و Mozilla AutoPush مجموعه ای دوستانه از پیام های خطا را برای مسائل Authorization
ارائه می کنند.
همچنین اگر سرصفحه Authorization
در درخواست فشار شما گنجانده نشده باشد، یک پاسخ خطای Unauthorized
از Mozilla AutoPush دریافت خواهید کرد.
{
"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 AutoPush دریافت خواهید کرد:
{
"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 | درخواست های خیلی زیاد سرور برنامه شما با یک سرویس فشار به حداکثر نرخ رسیده است. پاسخ سرویس باید شامل سرصفحه «تعداد مجدد پس از» باشد تا نشان دهد چه مدت قبل از درخواست دیگری میتوان انجام داد. |
400 | درخواست نامعتبر یکی از هدرهای شما نامعتبر است یا قالب بندی ضعیفی دارد. |
404 | یافت نشد. در این صورت باید PushSubscription را از قسمت پشتی خود حذف کنید و منتظر فرصتی برای اشتراک مجدد کاربر باشید. |
410 | رفته اشتراک دیگر معتبر نیست و باید از قسمت پشتی شما حذف شود. این را می توان با فراخوانی 'unsubscribe()' در 'PushSubscription' بازتولید کرد. |
413 | اندازه بار بسیار بزرگ است. حداقل اندازه باری که یک سرویس فشار باید پشتیبانی کند 4096 بایت (یا 4 کیلوبایت) است. هر چیزی بزرگتر می تواند منجر به این خطا شود. |
اگر کد وضعیت HTTP در این لیست نیست و پیام خطا مفید نیست، مشخصات پروتکل Web Push را بررسی کنید تا ببینید آیا کد وضعیت به همراه سناریویی از زمان استفاده از آن کد وضعیت ارجاع داده شده است یا خیر.
مشکل رمزگذاری بار
اگر بتوانید یک پیام فشار را با موفقیت راه اندازی کنید (یعنی پیامی را به یک سرویس فشار وب ارسال کنید و کد پاسخ 201 را دریافت کنید) اما رویداد فشار هرگز در سرویس کار شما فعال نمی شود، این معمولاً نشان می دهد که مرورگر در رمزگشایی پیامی که دریافت کرده است شکست خورده است.
اگر چنین است، باید یک پیام خطا در کنسول DevTools فایرفاکس مشاهده کنید:
برای بررسی اینکه آیا این مشکل در کروم است، موارد زیر را انجام دهید:
- به about://gcm-internals بروید و روی دکمه «شروع ضبط» کلیک کنید.
- یک پیام فشار را راه اندازی کنید و به زیر "گزارش شکست رمزگشایی پیام" نگاه کنید.
اگر مشکلی در رمزگشایی محموله وجود داشته باشد، خطای مشابهی را مشاهده خواهید کرد که در بالا نشان داده شده است. (به پیام AES-GCM decryption failed
در ستون جزئیات توجه کنید.)
در صورت بروز مشکل، چند ابزار وجود دارد که ممکن است به رفع اشکال رمزگذاری کمک کند:
مشکل اتصال
اگر رویداد فشاری را در سرویسکار خود دریافت نمیکنید و هیچ خطای رمزگشایی نمیبینید، ممکن است مرورگر به سرویس فشار متصل نشود.
در Chrome، میتوانید با بررسی «گزارش دریافت پیام» (sic) در about://gcm-internals
بررسی کنید که آیا مرورگر پیامها را دریافت میکند یا خیر.
اگر پیام را به موقع نمی بینید، مطمئن شوید که وضعیت اتصال مرورگر شما CONNECTED
است:
اگر "متصل" نیست ، ممکن است لازم باشد نمایه فعلی خود را حذف کرده و یک نمایه جدید ایجاد کنید . اگر باز هم مشکل را حل نکرد، لطفاً گزارش اشکال را همانطور که در زیر پیشنهاد میشود، مطرح کنید.
افزایش گزارش اشکال
اگر هیچ یک از موارد بالا به مشکل شما کمک نمی کند و هیچ نشانه ای از مشکل وجود ندارد، لطفاً مشکلی را در مورد مرورگری که با آن مشکل دارید مطرح کنید:
برای کروم، باید این مشکل را در اینجا مطرح کنید: https://bugs.chromium.org/p/chromium/issues/list برای فایرفاکس، باید این مشکل را در این آدرس مطرح کنید: https://bugzilla.mozilla.org/
برای ارائه یک گزارش اشکال خوب، باید جزئیات زیر را ارائه دهید:
- مرورگرهایی که در آنها آزمایش کرده اید (به عنوان مثال کروم نسخه 50، کروم نسخه 51، فایرفاکس نسخه 50، فایرفاکس نسخه 51).
- نمونه ای از
PushSubscription
که مشکل را نشان می دهد. - هر گونه درخواست نمونه (به عنوان مثال محتوای درخواست های شبکه به یک سرویس فشار، از جمله هدر) را درج کنید.
- هر گونه پاسخ نمونه از درخواست های شبکه را نیز درج کنید.
اگر بتوانید یک مثال قابل تکرار، چه کد منبع یا یک وب سایت میزبانی شده ارائه دهید، اغلب تشخیص و حل مشکل را سرعت می بخشد.
بعد کجا بریم
- مروری بر اعلان فشار وب
- چگونه فشار کار می کند
- اشتراک کاربر
- مجوز UX
- ارسال پیام با کتابخانه های وب Push
- پروتکل فشار وب
- مدیریت رویدادهای فشاری
- نمایش اعلان
- رفتار اطلاع رسانی
- الگوهای اعلان رایج
- سوالات متداول Push Notifications
- مشکلات رایج و گزارش اشکالات