سنوات طويلة كان User-Agent هو الحقل الأساسي لفهم المتصفح والنظام. مع User-Agent Client Hints أصبحت الصورة موزعة بين header تقليدي و Sec-CH-UA headers و JavaScript API، وبعض القيم لا تُرسل إلا بعد طلب الخادم لها أو وفق permissions policy. لذلك فحص UA فقط قد يعطي صورة ناقصة.
افهم البيانات المنخفضة والعالية entropy
بعض hints مثل brands والمنصة متاحة بصورة أوسع، بينما معلومات مثل platformVersion أو model قد تحتاج getHighEntropyValues أو سياسات مناسبة. لا تفترض أن الصفحة تحصل على كل شيء تلقائيًا.
اختبر HTTP و JavaScript معًا
استخدم endpoint يعرض request headers وصفحة تقرأ navigator.userAgentData. سجل الاثنين في نفس الجلسة. هذا يكشف حالات يكون UA معدلًا بينما hints بقيت مختلفة أو العكس، وهي مهمة في المتصفحات المخصصة.
خطوات عملية
- سجل User-Agent header.
- سجل Sec-CH-UA headers.
- اقرأ navigator.userAgentData.
- قارن المنصة والإصدارات.
انتبه ل ـAccept-CH وال ـcache
الخادم قد يرسل Accept-CH فتظهر hints إضافية في طلبات لاحقة. اختبر أول زيارة و reload ولا تعتمد على لقطة واحدة. بعض السياسات أصبحت مرتبطة ب ـPermissions-Policy أو سلوك browser version، لذا وثق الإصدار.
اختبر عبر subresources
قد تُرسل hints لل origin الرئيسي ولا تُرسل بنفس الشكل إلى third-party resource. راقب DevTools Network أو server logs. هذا يساعد على فهم ما تستطيع خدمات analytics الخارجية رؤيته فعليًا.
قائمة مراجعة
- first navigation.
- second navigation.
- same-origin resource.
- third-party resource.
استخدم الاتساق لا الإخفاء
في بيئة بروفايلات، تأكد أن UA و Client Hints لا يتعارضان بسبب تغيير أحدهما فقط. الهدف QA للاتساق مع المنصة المقصودة، وليس اختلاق جهاز غير موجود. أي تعديل يحتاج regression بعد Chromium update.
توقع تغير المواصفات
Client Hints منطقة تتطور. لا تثبت parser على ترتيب brands أو تفترض وجود hint للأبد. اكتب اختبارات feature detection واسمح بغياب الحقول الاختيارية بدل اعتبار ذلك فشلًا.
اختبر GREASE و Accept-CH عبر أكثر من زيارة
Client Hints ليست قائمة ثابتة دائمًا. Chromium قد يضيف brand مموهة GREASE أو يغير ترتيب brands، لذلك parser يأخذ أول عنصر فقط يمكن أن يخطئ. اختبر raw values عبر عدة إصدارات واعتبر الترتيب غير مضمون. كذلك سجّل الزيارة الأولى ثم زيارة لاحقة بعد أن يرسل الخادم Accept-CH؛ بعض high-entropy hints تظهر فقط في الطلبات التالية. قارن HTTP headers مع navigator.userAgentData في الصفحة، ثم اختبر resource من نفس origin وآخر third-party لترى أين تُرسل hints فعلًا. إذا كان المتصفح المخصص يعدل User-Agent أو المنصة، يجب أن تكون الطبقتان متسقتين بعد reload وليس في أول navigation فقط. هذه المصفوفة تمنع regression يظهر فقط بعد cache أو negotiation، وتمنع اعتبار GREASE علامة متصفح حقيقية.
قائمة مراجعة
- لا تعتمد على ترتيب brands.
- سجل first و second navigation.
- قارن HTTP و JavaScript.
- اختبر same-origin و third-party resource.
افصل الاتساق عن محاولة التقليد
عند تقييم «Client Hints مقابل User-Agent: ما الذي يراه الموقع فعلًا» ركز على الاتساق بين القيم بدل السعي إلى جعل كل قيمة تبدو مختلفة. أنشئ جدولًا يربط الشبكة وال ـtimezone واللغة وال ـUA والخصائص التي يغيرها المنتج، ثم افحص هل توجد تناقضات لا يمكن تفسيرها. أعد القياس بعد restart وبعد تغيير الشبكة لأن بعض القيم قد تأتي من cache أو من طبقة مختلفة. لا تعتبر اختلافًا واحدًا دليلًا على تتبع أو كشف؛ المطلوب مجموعة إشارات متوافقة وسيناريو يمكن تكراره. هذا يقلل القرارات المبنية على مواقع فحص واحدة أو نتائج لحظية.
قائمة مراجعة
- تسجيل القيم في نفس اللحظة.
- مقارنة بعد restart.
- تغيير متغير واحد فقط.
- تجنب الاستنتاج من أداة فحص واحدة.
شارك في تقييم ونقاش المقال
رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.
النقاش
جارٍ تحميل التعليقات…