تمت ترجمة هذه الصفحة تلقائياً. اقرأ النسخة الأصلية باللغة الإنجليزية هنا.

ملخص Passkeys. إرشادات عملية وأنماط إطلاق ومؤشرات KPI لبرامج passkeys.
navigator.userAgentData، مما يتطلب من المطورين الرجوع إلى التحليل الكلاسيكي لسلسلة User-Agent على متصفح Mozilla.getHighEntropyValues() إلى بيانات الأجهزة عالية الإنتروبيا في متصفحات Chromium فقط. يفتقر Safari وFirefox إلى واجهة برمجة التطبيقات هذه تمامًا.تتغير باستمرار طرق اكتشاف بيئات المستخدمين المختلفة والاستجابة لها. تقليديًا، كانت سلاسل User-Agent هي الطريقة لتحديد معلومات المتصفح والجهاز، مما يتيح لمواقع الويب تخصيص التجارب وفقًا لذلك. ومع ذلك، غالبًا ما استُخدمت هذه السلاسل لبصمات الأجهزة وتحديد المستخدمين دون موافقتهم لأسباب تسويقية، مما أثار مخاوف تتعلق بالخصوصية.
في هذا السياق، ظهرت تلميحات العميل كواجهات برمجة تطبيقات JavaScript كأداة توفر طريقة أكثر تحكمًا واحترامًا للخصوصية لمشاركة المعلومات الضرورية حول جهاز المستخدم وتفضيلاته. تركز هذه المقالة على عواقب تقليل User-Agent وتستكشف كيف تساعد تلميحات العميل في التكيف مع هذا الوضع الجديد.
النقاط الرئيسية التي سنتناولها:
نظرًا لأن المتصفحات وأنظمة التشغيل لها مواقف مختلفة وتكيف أساليبها بشكل مختلف، يواجه مطورو البرامج تحدي ضمان استمرار تطبيقاتهم في اكتشاف بيئات المستخدمين المختلفة والاستجابة لها بدقة عبر المتصفحات وأنظمة التشغيل.
تهدف هذه المقالة إلى تقديم نظرة عامة شاملة على هذه التغييرات، وتوفير رؤى وإرشادات عملية لمساعدة المطورين في حال كانت حالة الاستخدام أو البرامج الخاصة بهم تعتمد على تفاصيل الجهاز أو نظام التشغيل (مثل إدارة الأجهزة التفصيلية، أو اكتشاف الأجهزة المعروفة، أو منع الاحتيال، أو اكتشاف الميزات الأخرى) أو كما في حالتنا تحسين تجربة مفاتيح المرور باستخدام User-Agent وتلميحات العميل.
قبل أن نتعمق في التفاصيل الفنية حول تلميحات العميل، سنستكشف باختصار تاريخ User-Agent وكيف تعمل جهود تقليل User-Agent المختلفة.
يمكن تتبع تاريخ سلاسل User-Agent إلى بداية متصفحات الويب الأولى. طور تيم بيرنرز لي أول متصفح ويب، WorldWideWeb (والذي أعيدت تسميته لاحقًا باسم Nexus) في عام 1990. وتلا ذلك قريبًا متصفحات رائدة أخرى مثل Line Mode Browser في عام 1991، ثم ظهرت متصفحات مثل MidasWWW وViolaWWW وErwise وCello.
في عام 1993، يُنسب الفضل إلى إصدار NCSA Mosaic، والذي غالبًا ما يشار إليه ببساطة باسم Mosaic، في إشعال الارتفاع الأولي في شعبية الويب. كانت سلسلة User-Agent الخاصة بـ Mosaic مباشرة تمامًا، وعادةً ما يتم تنسيقها كـ NCSA_Mosaic/1.0 والتي تتميز باسم المنتج متبوعًا بشرطة مائلة اختيارية ورقم الإصدار.
في البداية، تم تقديم حقل User-Agent للأغراض التحليلية وللمساعدة في تحديد المشكلات. تم التوصية صراحة بأن هذا الحقل "يجب تضمينه" في طلبات HTTP، كما هو مذكور في أرشيف W3C HTTP من عام 1992. وفر هذا الحقل المباشر طريقة بسيطة وفعالة لنقل اسم المنتج وإصداره، مما ساعد في فهم واستكشاف المشكلات المتعلقة بالمتصفح.
مع تطور الويب، تطور أيضًا تعقيد واستخدام سلاسل User-Agent. أصبحت أكثر تفصيلاً وبدأت في تضمين ثروة من المعلومات حول المتصفح ونظام التشغيل والجهاز. ورغم أن هذه المعلومات كانت قيمة لتحليلات الويب وتحسين تجارب المستخدم، إلا أنها شكلت أيضًا مخاوف كبيرة تتعلق بالخصوصية. سمحت سلاسل User-Agent التفصيلية بـ بصمات الأجهزة (device fingerprinting)، مما مكن المعلنين والمتتبعين من إنشاء ملفات تعريف فريدة للمستخدمين وتتبع أنشطتهم عبر الإنترنت عبر مواقع الويب المختلفة.
في العصر الحديث، حيث أصبحت الخصوصية مصدر قلق مهم للمستخدمين والمنظمين على حد سواء، نُظر بشكل متزايد إلى الطبيعة التفصيلية لسلاسل User-Agent على أنها إشكالية. وقد أدى هذا الإدراك إلى جهود لتقليل دقة سلاسل User-Agent، بهدف تحقيق التوازن بين توفير المعلومات اللازمة لوظائف الويب وحماية خصوصية المستخدم. يمثل هذا التحول بداية تقليل User-Agent، وهي حركة نحو تقليل المعلومات المشتركة في سلاسل User-Agent للتخفيف من مخاطر الخصوصية وتعزيز الأمان.
بدأت حركة تقليل User-Agent كاستجابة لمخاوف الخصوصية المتزايدة. وفيما يلي نظرة عامة زمنية على المعالم الرئيسية في هذا التطور:
في عام 2017، أطلقت Apple حركة تقليل User-Agent بمنشور شهير على Twitter أعلنت فيه أن Safari سيجمد سلسلة User-Agent في Safari Technology Preview 46 (STP 46)، بهدف مكافحة بصمات الأجهزة وتحسين الخصوصية.
ومع ذلك، تم التراجع جزئيًا عن هذا القرار لاحقًا في عام 2021 بسبب مشكلات التوافق الكبيرة مع مواقع الويب التي تعتمد على معلومات User-Agent المحدثة.
في 2019/2020، أعلنت Google عن خطط لتقليل دقة سلاسل User-Agent في Chrome، وقدمت تلميحات عميل User-Agent (UA-CH) كطريقة مرنة ومحكومة لطلب معلومات محددة عن المتصفح والجهاز. بدأت Google في اختبار تقليل User-Agent في إصدارات Chrome Canary وBeta، وجمعت التعليقات لضمان التوافق والوظائف واكتمل ذلك في عام 2023 لنظام Android وجميع منصات Chrome الأخرى. في الوقت نفسه، قدم Chrome تلميحات العميل كطريقة جديدة للوصول إلى تلك المعلومات. نظرًا لأن Microsoft Edge يعتمد على Chromium، فإن Microsoft Edge يتصرف مثل Chrome على جميع المنصات.
في عام 2021، انضمت Mozilla إلى هذا الجهد، وقللت تدريجيًا من دقة سلسلة User-Agent ولكن Mozilla قررت عدم دعم تلميحات العميل في Firefox.
يختلف تقليل User-Agent حسب المتصفح: نفذ Chromium (Chrome، Edge) تقليلًا كاملاً لـ UA مع دعم تلميحات العميل. ومع ذلك، يستخدم Safari نهجه الخاص في تجميد UA دون اعتماد UA-CH، ولم ينفذ Firefox navigator.userAgentData. لا يزال النظام البيئي مجزأً.
تطورت تلميحات العميل داخل Chromium: لا تزال جميع المتصفحات ترسل رأس User-Agent، ولكن في معظمها يتم تجميده إلى إصدار أقدم (انظر الجدول أدناه). بالنسبة لـ Chromium، يمكن استخدام تلميحات العميل للحصول على مزيد من المعلومات.
دعونا نلقي نظرة على ما ترسله المتصفحات حاليًا كوكلاء مستخدم في الفصل التالي.
اشترك في Passkeys Substack للحصول على آخر الأخبار.
عند الحديث عن تقليل User-Agent، فإن المقصود هو تقليل المعلومات داخل سلسلة User-Agent. دعونا نتعمق أكثر لمعرفة ما كان مضمنًا في User-Agent قبل التقليل.
تضمنت سلسلة User-Agent الكلاسيكية عادةً المكونات التالية، والتي يمكن استخدامها لاكتشاف الوظائف:
Mozilla/5.0 (Linux; Android 13; Pixel 7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.2.1.0 Mobile Safari/537.36
تاريخيًا، غالبًا ما استُخدمت سلاسل User-Agent لاكتشاف الميزات والمنصات، مما يتيح لمواقع الويب تخصيص محتواها ووظائفها بناءً على خصائص المتصفح والجهاز المكتشفة (على سبيل المثال، تحديد التنزيل الثنائي المحدد الذي سيتم تقديمه). أصبح هذا مهمًا بشكل خاص مع صعود الهواتف المحمولة والأجهزة اللوحية للتخطيطات التي لم يتم بناؤها بشكل متجاوب (responsive) لتكون قادرة على إعادة توجيه الهواتف المحمولة إلى إصدارها الخاص.
ومع ذلك، يُعتبر هذا النهج الآن دون المستوى الأمثل، حيث يعتمد على افتراضات حول قدرات المتصفح والتي قد لا تكون صحيحة أو غير محددة بما يكفي. تدعو ممارسات تطوير الويب الحديثة إلى استخدام اكتشاف الميزات عبر واجهات برمجة تطبيقات المتصفح حيثما أمكن للتحقق مباشرة من ميزات وقدرات المتصفح المحددة. هذه الطريقة أكثر موثوقية وتضمن أن مواقع الويب تعمل بشكل صحيح بغض النظر عن سلسلة User-Agent أو إصدار المتصفح. يركز اكتشاف الميزات على القدرات الفعلية للمتصفح، مما يوفر طريقة أكثر قوة ومقاومة للمستقبل للتعامل مع الاختلافات في سلوك المتصفح ووظائفه.
حتى اليوم، هذا غير ممكن بالكامل حيث يتم تنفيذ واجهات برمجة تطبيقات المتصفح الجديدة لاكتشاف الوظائف في أوقات مختلفة وغالبًا ما يكون هناك نهج مختلف بين فرق المتصفحات الأكبر (مثل المتصفحات القائمة على Chromium) وفرق المتصفحات الأصغر (مثل Firefox).
توفر المزيد من المعلومات لموقع الويب إمكانية أوسع لإنشاء بصمة جهاز بـ "إنتروبيا" أكبر. الإنتروبيا في هذا السياق هي مقدار الاختلاف الذي يمكن استخدامه لإنشاء بصمة فريدة بين الزوار المختلفين لموقع ويب.
يمكن استخدام بصمة الجهاز لأغراض مختلفة. يمكن استخدامها لأغراض وقائية مثل اكتشاف الاحتيال وإيقاف الاستيلاء على الحسابات من خلال تحديد الأجهزة الجديدة، ولكن يمكن استخدامها أيضًا لتحديد الزوار دون موافقتهم أو لاستهداف الإعلانات بشكل أكثر تحديدًا.
في سياق سلاسل User-Agent، تشير الإنتروبيا إلى مقدار المعلومات الفريدة القابلة للتحديد والتي يمكن استخدامها لتتبع وتمييز المستخدمين الأفراد.
هناك الكثير من المعلومات الإضافية التي يمكن استخدامها كمصدر للإنتروبيا أسفل User-Agent. على سبيل المثال، يمكنك العثور على مصادر مختلفة للإنتروبيا على https://coveryourtracks.eff.org.
لذلك، عندما تتحدث المتصفحات عن تقليل User-Agent، فإنها تستهدف في المقام الأول تقليل المعلومات عالية الإنتروبيا. فيما يلي أمثلة مختلفة للتقليل:
فيما يلي، تجد مثالًا لتقليل User-Agent في Google Chrome على هاتف Android:
قبل:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>13; Pixel 7</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
بعد:
Mozilla/5.0 (Linux; Android <span style={{color: '#016F01' }}>10; K</span>) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.0.0 Mobile Safari/537.36
ظل تنسيق User-Agent دون تغيير لكي لا يتداخل مع منطق التحليل الحالي للمكتبات. تم تقليل القيم التالية:
يوضح الرسم البياني القيم التي سيستمر تحديثها بناءً على نظام التشغيل، وتُظهر القيم الخضراء القيم التي ستظل ثابتة على جميع المنصات. بالنسبة لقيم أنظمة التشغيل المختلفة، لن يتوفر سوى متغير يظل ثابتًا:
| نظام التشغيل | الاسم المخفض/الثابت |
|---|---|
| Mac | Macintosh; Intel Mac OS X 10_15_7 |
| Windows | Windows NT 10.0; Win64; x64 |
| ChromeOS | X11; CrOS x86_64 14541.0.0 |
| Linux | X11; Linux x86_64 |
| Android | Linux; Android 10; K |
| iOS | مخفض (iOS 26+) |
فيما يلي، تجد مثالًا لتقليل User-Agent في Mozilla Firefox والذي يتبع معظم مواقف Google بشأن تقليل User-Agent.
إليك مثال على User-Agent على Windows 11 بإصدار Firefox الحالي:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:127.0) Gecko/20100101 Firefox/127.0
في هذا الـ User-Agent، تم تجميد بنية وحدة المعالجة المركزية، وإصدار نظام التشغيل، والإصدار الفرعي للمتصفح.
فيما يلي، تجد مثالًا على تقليل User-Agent في Safari على macOS.
أولاً، لنبدأ بـ User-Agent لـ Safari على macOS Sonoma الإصدار 14.5 على Mac Silicon M2.
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Safari/605.1.15
يمكنك أن ترى أن إصدار macOS محدد بـ 10_15_07 والبنية ثابتة أيضًا على Intel ولا تُبلغ عن بنية وحدة المعالجة المركزية لـ Mac. هذا ينطبق أيضًا على Firefox و Chrome على macOS.
قبل iOS 26 (الصادر في سبتمبر 2025)، كان Safari على iOS يعرض الإصدار الفعلي لنظام التشغيل. ومع ذلك، قامت Apple الآن بتجميد User-Agent لـ iOS/iPadOS في Safari 26، بشكل مشابه لـ macOS. يوضح المثال أدناه User-Agent ما قبل iOS 26:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.5 Mobile/15E148 Safari/604.1
ملاحظة: اعتبارًا من iOS 26، أصبحت جميع المتصفحات على iOS (Chrome، Firefox، Safari) تمتلك الآن سلاسل User-Agent مجمدة، على غرار macOS. توضح الأمثلة أدناه سلوك ما قبل iOS 26:
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) CriOS/126.0.6478.153 Mobile/15E148 Safari/604.1
Mozilla/5.0 (iPhone; CPU iPhone OS 17_5_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) FxiOS/127.1 Mobile/15E148 Safari/605.1.15
بشكل عام، من الواضح أن User-Agent يتم تقليله تحديدًا في المعلومات عالية الإنتروبيا. توضح النظرة العامة التالية تركيبات المنصات / أنظمة التشغيل التي يتم فيها تقليل User-Agent.
| المتصفح | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | مخفض | مخفض | مخفض (iOS 26+) | مخفض |
| Edge | مخفض | مخفض | مخفض (iOS 26+) | مخفض |
| Firefox | مخفض | مخفض | مخفض (iOS 26+) | مخفض |
| Safari | - | مخفض* | مخفض (Safari 26+)** | - |
| Samsung Internet | - | - | - | مخفض |
| WebViews | - | - | مخفض (iOS 26+) | غير مخفض (≥ 16: مخفض) |
لذلك، فإن أهم مشاكل الاكتشاف مع User-Agent المخفض هي (* = انظر الملاحظات أدناه لإصدار macOS):
إليك جدول يربط إصدارات macOS بإصدارات Safari المقابلة لها:
| إصدار macOS | إصدار Safari | سنة الإصدار |
|---|---|---|
| macOS Sequoia (15) | Safari 18 | 2024 |
| macOS Sonoma (14) | Safari 17 | 2023 |
| macOS Ventura (13) | Safari 16 | 2022 |
| macOS Monterey (12) | Safari 15 | 2021 |
| macOS Big Sur (11) | Safari 14 | 2020 |
| macOS Catalina (10.15) | Safari 13 | 2019 |
هناك طرق أخرى لاكتشاف أنظمة التشغيل والمتصفحات استنادًا إلى تقنيات بصمة الأجهزة المعقدة، مثل بصمة TLS. نظرًا لوجود سيناريوهات مشروعة حيث يكون الاكتشاف الأعمق لنظام التشغيل منطقيًا، قدمت Google تلميحات العميل لتكون قادرة على تلقي هذه المعلومات برمجيًا. سنرى كيف تعمل تلميحات العميل في الفصل التالي.
تُمكّن تلميحات العميل مواقع الويب من الوصول إلى المعلومات عالية الإنتروبيا التي تمت إزالتها من سلسلة User-Agent بطريقة تحترم الخصوصية. هناك طريقتان أساسيتان للوصول إلى تلميحات العميل:
يمكن استخدام تلميحات العميل أيضًا لاسترداد المعلومات منخفضة الإنتروبيا المضمنة بالفعل في User-Agent. هذا يعني أنه على Chrome، حيث تُدعم تلميحات العميل، لم تعد هناك حاجة لـ User-Agents.
اعتمادًا على طريقة الوصول المستخدمة، تختلف تسمية تلميحات العميل قليلاً. لقد قمنا بإدراج أهم أسماء تلميحات العميل:
| رمز HTTP UA-CH | واجهة برمجة تطبيقات UA-CH JS | الإنتروبيا |
|---|---|---|
| Sec-CH-UA-Platform-Version | UADataValues.platformVersion | عالية |
| Sec-CH-UA-Mobile | NavigatorUAData.mobile | منخفضة |
| Sec-CH-UA-Model | UADataValues.model | عالية |
| Sec-CH-UA | NavigatorUAData.brands | منخفضة |
| Sec-CH-UA-Arch | UADataValues.architecture | عالية |
في سياق الطرف الأول، يمكن لمواقع الويب طلب معلومات محددة حول متصفح المستخدم وجهازه باستخدام رؤوس طلبات HTTP. يتضمن هذا النهج تعيين الرأس الصحيح في استجابة HTTP للخادم، مما يشير إلى تلميحات العميل التي يهتم بها الخادم. يقوم المتصفح بعد ذلك بتضمين هذه التلميحات في الطلبات اللاحقة لنفس الأصل.
يشير هذا الرأس للمتصفح لإرسال معلومات تفصيلية عن المستخدم في الطلبات المستقبلية، مما يسمح للخادم بتخصيص الاستجابات وفقًا لذلك. تضمن هذه الطريقة إمكانية الوصول إلى معلومات المستخدم التفصيلية فقط إلى موقع الويب الخاص بالطرف الأول، مما يمنع موارد الطرف الثالث من الحصول على بيانات عالية الإنتروبيا. يتوفر نوعان من رؤوس الطلبات التي سنناقشها الآن:
تلميحات العميل العادية هي رؤوس يمكن للخادم طلبها من المتصفح لجمع معلومات حول بيئة المستخدم في الطلبات اللاحقة.
مثال: Chrome على macOS 14.5 مع تلميحات العميل العادية على corbado.com
| الرأس | القيمة |
|---|---|
| Sec-Ch-Ua | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-Ch-Ua-Mobile | ?0 |
| Sec-Ch-Ua-Platform | "macOS" |
| الرأس | القيمة |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| الرأس | القيمة |
|---|---|
| Sec-Ch-Ua | "Google Chrome";v="125", "Chromium";v="125", "Not.A/Brand";v="24" |
| Sec-Ch-Ua-Mobile | ?0 |
| Sec-Ch-Ua-Platform | "macOS" |
| Sec-Ch-Ua-Platform | "14.5.0" |
في الوقت نفسه، سيبقى User-Agent لهذا الطلب كما هو (بدون إصدار المنصة):
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
باستخدام https://user-agent-client-hints.glitch.me/headers، يمكنك فعليًا تجربة كيف ستبدو تخطيطات مختلفة من المعلومات للتلميحات العادية (ضع في اعتبارك يجب عليك استخدام Chrome). انظر هنا لمزيد من التفاصيل. في حال احتاج corbado.com إلى هذه المعلومات في أول طلب للصفحة، فإن استخدام تلميحات العميل العادية لن يكون كافيًا، ولكن هناك طريقة لتسريع هذه العملية من خلال التلميحات (العميل) الحرجة.
لنفترض أن corbado.com يحتاج إلى إصدار النظام الأساسي (platform-version) في الطلب الأول لعرض صفحة تنزيل مناسبة مصممة خصيصًا لإصدار macOS الدقيق. يمكنه استخدام التلميحات (العميل) الحرجة والتي قد تؤدي إلى إعادة محاولة الطلب فورًا فقط لعرض الصفحة التي تتضمن الرأس:
مثال: Chrome على macOS 14.5 مع تلميحات العميل الحرجة على corbado.com
| الرأس | القيمة |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| الرأس | القيمة |
|---|---|
| Accept-CH | Sec-CH-UA-Platform-Version |
| الرأس | القيمة |
|---|---|
| Sec-CH-UA | "Google Chrome";v="125", "Chromium";v="125", "Not_A/Brand";v="24" |
| Sec-CH-UA-Mobile | ?0 |
| Sec-CH-UA-Platform | "macOS" |
| Sec-CH-UA-Platform-Version | "14.5.0" |
في الرسوم البيانية التالية، نرى مثالاً آخر حيث يطلب موقع الويب طراز الجهاز كجزء حرج مع رأس Critical-CH. وكما نرى، يعيد العميل محاولة الطلب كما في المثال أعلاه (مخطط التسلسل الأيسر).
تلميحات العميل مع Chromium: https://developers.google.com/privacy-sandbox/protections/User-Agent
لذلك فإن استخدام تلميحات العميل الحرجة يضيف زمن وصول (latency) لأن المتصفح يجب أن يبدأ طلبًا ثانيًا على الفور مما يضيف رحلات ذهاب وإياب. توجد طريقة لتحسين النقل عن طريق تسهيل مصافحة TLS (TLS handshake) (المربع الأخضر أعلى المخطط) لنقل التفاصيل مسبقًا. يمكن العثور على هذا النهج الذي يسهل ALPN (تفاوض بروتوكول طبقة التطبيق) هنا بالتفصيل ولكنه يتجاوز الغرض من هذه المقالة.
لتلقي معلومات إضافية باستخدام الرؤوس، يجب إضافة التكوين (configuration) إما إلى الواجهة الخلفية أو إلى خادم الويب / موازنات التحميل (load balancers). يتم ذلك بسهولة في سياق الطرف الأول، عندما يكون لديك تحكم كامل في موقع الويب كشركة. على سبيل المثال، تتطلب مكونات واجهة المستخدم الخاصة بنا في corbado.com إصدار المنصة لزيادة دقة ذكاء مفاتيح المرور (passkey intelligence) لدينا. يقوم المطورون بدمج مكوناتنا في صفحات مختلفة، وسيكون مطالبتهم بإضافة الرؤوس ثم تمرير هذه المعلومات إلى مكوناتنا عبئًا غير مستحب. بالنسبة لـ SPAs وتطبيقات JavaScript المضمنة الأخرى، توجد واجهة أخرى يمكن استخدامها، والتي سيتم شرحها في القسم التالي.
باستخدام وظيفة navigator.userAgentData.getHighEntropyValues()، يمكن أيضًا الوصول إلى تلميحات العميل عبر واجهة برمجة تطبيقات JavaScript، مما يوفر طريقة مرنة وديناميكية لطلب معلومات محددة حول متصفح المستخدم وجهازه. تتضمن هذه الطريقة استخدام كائن navigator.userAgentData ضمن البرنامج النصي لصفحة الويب للاستعلام عن تلميحات العميل. لا تتطلب هذه الطريقة تعيين رؤوس تلميح العميل، ولكنها تعمل فقط في المتصفحات التي تدعم navigator.userAgentData (المتصفحات القائمة على Chromium مثل Chrome وEdge). لا يدعم Firefox وSafari واجهة برمجة التطبيقات هذه، لذلك يجب على المطورين اكتشاف الميزات وتوفير البدائل (fallbacks).
على سبيل المثال، عند تنفيذ هذه التعليمة البرمجية في Chrome Console على macOS:
if (navigator.userAgentData) { navigator.userAgentData .getHighEntropyValues(["architecture", "model", "platformVersion"]) .then((ua) => { console.log(ua); }); }
عندما يُحل الوعد (promise resolves)، يتم إرجاع المعلومات ذات الصلة. كما أوضحنا أعلاه، فإن الأسماء ليست متطابقة تمامًا مع الرؤوس ولكنها قريبة جدًا.
يتم بعد ذلك إرجاع platformVersion في الوعد ويمكن الوصول إليه مباشرة من كود JavaScript المضمن. تغطية هذه الوظيفة أقل بكثير من تقليل User-Agent الفعلي:
بالإضافة إلى ذلك، لا يقدم Chrome هذه الوظيفة على iOS لأنه ينشر WebKit على iOS بسبب قيود Apple.
لقد قمنا الآن بتجميع أهم الحقائق حول تقليل User-Agent وكيف تقدم تلميحات العميل طريقة للتغلب عليه في Chrome.
اعتمادًا على حالة الاستخدام الخاصة بك، يجب عليك استخدام نهج مختلف لضمان حصول تطبيقك على أفضل نتيجة ممكنة:
يلخص الجدول التالي الأماكن التي لا تزال قادرًا فيها على اكتشاف إصدار نظام التشغيل إذا كان لديك وصول إلى User-Agent (UA) وتلميحات العميل (CH):
| المتصفح | Windows | MacOS | iOS | Android |
|---|---|---|---|---|
| Chrome | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Edge | ✅ CH | ✅ CH | ❌ (iOS 26+) | ✅ CH |
| Firefox | ❌ | ❌ | ❌ (iOS 26+) | ❌ |
| Safari | - | ✅ UA-Safari | ❌ (Safari 26+) | - |
| Samsung Internet | - | - | - | ✅ CH |
| WebViews | - | - | ❌ (iOS 26+) | ✅ UA (≥ 16: ❌) |
من خلال اختيار الطريقة المناسبة بناءً على احتياجاتك الخاصة، يمكنك الموازنة بفعالية بين الحاجة إلى معلومات المستخدم التفصيلية واعتبارات الخصوصية والأداء. إذا كنت تعتمد بشكل كبير على معلومات يصعب استخراجها أو تعتمد حقًا على الجهاز، فارجع إلى المكتبات الاحترافية مثل wurfl أو 51degrees.com التي تقوم بالعمل الشاق نيابة عنك. تدعم كلتا المكتبتين دمج تلميحات العميل في الاكتشاف ولها أيضًا طريقتها الخاصة لاكتشاف طرازات iPhone.
في Corbado، نركز على تطوير حلول حول مفاتيح المرور باستخدام مكونات واجهة المستخدم التي تم تطويرها بشكل أساسي باستخدام React. يتم دمج مكوناتنا في مواقع ويب مختلفة، لذا نتبع توصيتنا الخاصة ونستخدم getHighEntropyValues() أينما كانت متاحة، مع اللجوء إلى التحليل الكلاسيكي لـ User-Agent لجميع الحالات الأخرى. نستخدم هذا بشكل أساسي من أجل:
مزيد من التفاصيل على: https://learn.microsoft.com/en-us/microsoft-edge/web-platform/how-to-detect-win11
عندما بدأنا في تجميع المعلومات لمكوناتنا، وجدنا الكثير من البيانات المجزأة التي تم إنشاؤها أثناء أو قبل بدء تقليل User-Agent. لذلك، اعتقدنا أن ملخصًا سيساعد المطورين الذين يرغبون في تحسين الاكتشاف ولكنهم لا يعملون مع User-Agents أو تلميحات العميل بانتظام.
بعد أن كان الاكتشاف القائم على User-Agent هو المعيار لعقود من الزمن، أصبحت سلاسل User-Agent أقل تفصيلاً لحماية خصوصية المستخدم. في هذه المقالة قمنا بتغطية:
تستمر تلميحات العميل في التطور، وقد يزداد اعتمادها مع إدراك المزيد من المتصفحات والمطورين لفوائدها. ومع ذلك، يبقى أن نرى ما إذا كان دعمها سيصبح واسع الانتشار أو ما إذا كان الويب سيستمر في التباعد حول هذا الموضوع.
Corbado هي Authentication Intelligence Platform لفِرَق CIAM التي تُدير المصادقة الاستهلاكية على نطاق واسع. نُمكّنك من رؤية ما لا تستطيع سجلات IDP وأدوات التحليل العامة إظهاره: أي الأجهزة وإصدارات أنظمة التشغيل والمتصفحات ومديري بيانات الاعتماد تدعم passkeys، ولماذا لا تتحوّل عمليات التسجيل إلى عمليات دخول، وأين يفشل تدفق WebAuthn، ومتى يُعطّل تحديث نظام التشغيل أو المتصفح تسجيل الدخول بصمت — كل ذلك دون استبدال Okta أو Auth0 أو Ping أو Cognito أو IDP الداخلي لديك. منتجان: Corbado Observe يُضيف observability للـ passkeys وأي طريقة دخول أخرى. Corbado Connect يُقدّم managed passkeys مع تحليلات مدمجة (إلى جانب IDP الخاص بك). تُشغّل VicRoads passkeys لأكثر من 5 ملايين مستخدم مع Corbado (تفعيل passkey بنسبة +80%). تحدث مع خبير Passkey →
جمدت Apple سلسلة User-Agent الخاصة بـ iOS/iPadOS في Safari 26، الذي تم إصداره في سبتمبر 2025، مما يعني أن إصدار نظام التشغيل لم يعد مكشوفًا عبر User-Agent على أي متصفح يعمل على iOS. على عكس Chrome على Android أو سطح المكتب، لا تتوفر واجهة برمجة تطبيقات تلميحات العميل (Client Hints) على متصفحات iOS، لذا لم يعد إصدار iOS الفعلي قابلاً للوصول برمجيًا.
يتم تضمين تلميحات العميل العادية، المطلوبة عبر رأس الاستجابة Accept-CH، فقط في الطلبات اللاحقة وتكون غير متوفرة عند تحميل الصفحة الأولي. تؤدي تلميحات العميل الحرجة إلى إعادة محاولة المتصفح فورًا قبل العرض، مما يضمن توفر التلميح في العرض الأول، ولكن هذا يضيف رحلة ذهاب وإياب من زمن الوصول إلى دورة الطلب.
أعلنت Apple عن تجميد User-Agent في Safari Technology Preview 46 في عام 2017 ولكنها تراجعت جزئيًا عن القرار في عام 2021 بسبب مشكلات التوافق الكبيرة مع مواقع الويب التي تعتمد على معلومات User-Agent المحدثة. نفذت Apple لاحقًا نهجًا تدريجيًا لتجميد UA بدلاً من التجميد الكامل الفوري في ذلك الوقت.
لا يدعم Safari تلميحات العميل، ولكن يمكن استنتاج إصدار macOS من رقم إصدار Safari في سلسلة User-Agent. يؤدي طرح ثلاثة من الإصدار الرئيسي لـ Safari إلى تعيين الإصدار الرئيسي لـ macOS بشكل موثوق لنظام التشغيل macOS 10.15 وما فوق، بناءً على محاذاة الإصدار المتسقة بين إصدارات Safari وmacOS.
النهج الموصى به هو استدعاء navigator.userAgentData.getHighEntropyValues() عندما تكون الوظيفة محددة، لتغطية المتصفحات القائمة على Chromium، واللجوء إلى مكتبات تحليل سلسلة User-Agent لـ Firefox وSafari. بالنسبة للحالات التي تتطلب تحديدًا دقيقًا جدًا لطراز الجهاز، توفر المكتبات الاحترافية مثل wurfl أو 51degrees إمكانات اكتشاف إضافية تتجاوز ما تكشفه سلاسل User-Agent.
مقالات ذات صلة
جدول المحتويات