کروم کام کر رہا تھا۔ فائر فاکس خالی تھا۔
میں نے ایک عجیب بگ دیکھا۔ میں نے ایک ہی پیج کو دو براؤزرز میں آمنے سامنے کھولا۔
کروم میں سب کچھ کام کر رہا تھا۔ مجھے تصاویر، بٹن اور ڈیٹا نظر آ رہا تھا۔ فائر فاکس میں مجھے کچھ نظر نہیں آیا۔ مجھے خالی کارڈز اور ایک پیغام نظر آیا جس پر لکھا تھا "0 results found"۔
یہ وہی URL تھا۔ یہ وہی بلڈ (build) تھا۔ یہ وہی مشین تھی۔
اس کی وجہ ایک ایسا بگ تھا جسے ڈویلپمنٹ کے دوران ڈھونڈنا تقریباً ناممکن ہے۔ براؤزر میری اپنی API کالز کو بلاک کر رہا تھا۔ میں نے صرف اسی ایک براؤزر میں ڈویلپمنٹ کی جس نے انہیں بلاک نہیں کیا تھا۔
The problem: پیج ڈیٹا حاصل کرنے کے لیے JavaScript کا استعمال کرتے ہوئے ایک تھرڈ پارٹی ڈومین (Supabase) سے ڈیٹا منگواتا ہے۔ Firefox "Enhanced Tracking Protection" کا استعمال کرتا ہے۔ بہت سے صارفین uBlock Origin جیسے ایڈ بلاکرز (ad blockers) بھی استعمال کرتے ہیں۔ یہ ٹولز تھرڈ پارٹی ڈومین کو دیکھتے ہیں اور کمپیوٹر سے نکلنے سے پہلے ہی درخواست (request) کو بلاک کر دیتے ہیں۔
کوڈ کریش نہیں ہوا۔ کنسول (console) میں کوئی سرخ ایرر (error) بھی ظاہر نہیں ہوا۔ fetch نے بس کچھ بھی واپس نہیں کیا۔ پھر میرے کوڈ نے ہدایت کے مطابق ایک "empty state" دکھا دیا۔ ایک عام دیکھنے والے کے لیے پیج بالکل ٹھیک لگ رہا تھا۔ یہ بس خالی نظر آ رہا تھا۔
یہ بگ دو وجوہات کی بنا پر نظر نہیں آ رہا تھا:
- میں نے کروم میں ڈویلپمنٹ کی، جس نے کال کی اجازت دی۔
- میری اینالیٹکس (analytics) بھی اسی API ڈومین کا استعمال کر رہی تھیں۔ وہ صارفین جو مواد نہیں دیکھ پا رہے تھے، وہ میرے ڈیٹا میں شمار بھی نہیں ہو سکے۔
How I fixed it:
میں نے درخواست کو قابل اعتماد (trusted) طرف منتقل کرنے کے لیے ایک ریورس پراکسی (reverse proxy) کا استعمال کیا۔
کے بجائے: mysite.com -> xxxx.supabase.co (Third-party / Blocked)
میں نے اس پر منتقل کر دیا: mysite.com -> mysite.com/sb-api (First-party / Trusted)
API کو اپنے ڈومین کے ذریعے روٹ کرنے سے، براؤزر کو لگتا ہے کہ یہ درخواست خود سائٹ کا حصہ ہے۔ Firefox اب اسے ٹریکر (tracker) کے طور پر نہیں دیکھتا۔
اگر آپ یہ طریقہ استعمال کرتے ہیں تو تین باتیں یاد رکھیں:
- اپنے websockets چیک کریں۔ سادہ ری رائٹس (rewrites) سے ریئل ٹائم فیچرز خراب ہو سکتے ہیں۔
- اپنی auth storage key کو پن (pin) کریں۔ URL تبدیل کرنے سے براؤزر کے لاگ ان سیشنز اسٹور کرنے کا طریقہ بدل سکتا ہے۔
- سرور سائیڈ کالز کو براہ راست رکھیں۔ ایسے کوڈ کے لیے آپ کو پراکسی کی ضرورت نہیں ہے جو براؤزر میں نہیں چلتا۔
The lesson: یہ فرض کرنا چھوڑ دیں کہ "اگر یہ کروم میں کام کر رہا ہے، تو یہ کام کر رہا ہے۔"
اپنی سائٹ کو Firefox میں سخت پرائیویسی سیٹنگز اور ایڈ بلاکر کے ساتھ ٹیسٹ کریں۔ یہی آپ کی اصل کمزوری (blind spot) ہے۔