إذا نظرت إلى سلسلة User-Agent لمتصفح Chrome حديث، ستجد شيئًا مثل "Mozilla/5.0 ... AppleWebKit/537.36 ... Chrome/120.0 Safari/537.36" — سلسلة مليئة بأسماء متصفحات ليس Chrome واحدًا منها فعليًا. هذه نتيجة عقود من الحيل التاريخية، وليست صدفة.
أصل كلمة "Mozilla"
في التسعينيات، كانت المواقع تحدد إمكانيات المتصفح بالتحقق مما إذا كانت سلسلة User-Agent تحتوي على "Mozilla" (الاسم الرمزي لمتصفح Netscape Navigator، رائد السوق آنذاك). وعندما أراد Internet Explorer الحصول على نفس المحتوى "المتقدم"، بدأ بإضافة "Mozilla" إلى سلسلته أيضًا — وترسّخ هذا التقليد إلى الأبد.
متصفحات ضغط البيانات في الأسواق ذات التكلفة العالية للإنترنت
في أسواق عديدة بالمنطقة العربية حيث كانت تكلفة بيانات الجوال مرتفعة نسبيًا وسرعات الشبكة أبطأ، انتشرت متصفحات مثل UC Browser وOpera Mini بفضل ميزة ضغط الصفحات عبر خادم وسيط لتقليل استهلاك البيانات — وهي ميزة لا تحتاجها الأسواق ذات النطاق العريض الرخيص. تضيف هذه المتصفحات توكنات خاصة بها إلى User-Agent (مثل UCBrowser/ أو OPR/)، وقد تُصنَّف خطأً كمتصفح Chrome أو Safari عادي إذا اكتفى كود التحليل بالبحث عن الكلمات المألوفة فقط.
لماذا الكشف عبر User-Agent غير موثوق
بما أن كل متصفح جديد يضيف توكنات أسلافه إلى User-Agent من أجل التوافق، تحوّلت هذه السلسلة إلى كومة من البقايا التاريخية بدلًا من وصف دقيق للمتصفح. أفضل ممارسة حاليًا هي اكتشاف الميزات (feature detection) لقدرات JavaScript أو CSS تحديدًا، بدلًا من تحليل User-Agent.
لماذا يُستخدم هذا
- تشخيص مشاكل التوافق بمعرفة أي متصفح وإصدار يُبلغ عنه العميل بالضبط.
- فهم سجلات الخادم التي تُسجَّل فيها سلاسل User-Agent للزوار.
- إدراك لماذا يخطئ كود الكشف القديم المعتمد على User-Agent غالبًا.
User-Agent Client Hints كبديل
بدلًا من تحليل سلسلة واحدة مثقلة بالتفاصيل، تدعم المتصفحات الحديثة المبنية على Chromium الآن User-Agent Client Hints — ترويسات منفصلة مثل Sec-CH-UA وSec-CH-UA-Platform وSec-CH-UA-Mobile، يجب على الخادم طلبها صراحةً ويحصل عليها بصيغة منظّمة. هذا جزء من توجه أوسع نحو "تقليص User-Agent" لحماية الخصوصية، ما يعني أن سلسلة User-Agent التقليدية ستحمل تفاصيل أقل مع الوقت.