Chaînes User Agent : Lire les empreintes de navigateur
Ce que cette chaîne bizarre te dit sur tes visiteurs et pourquoi c'est souvent trompeur.
Chaque requête HTTP inclut un en-tête User-Agent. Quelque chose comme :
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
C'est censé identifier le navigateur. En pratique, c'est un désordre historique.
Pourquoi chaque navigateur ment
Ce user agent Chrome mentionne Mozilla, AppleWebKit, KHTML et Safari. Chrome n'est aucun de ceux-là.
Voici pourquoi : les sites web vérifiaient les user agents et servaient du contenu différent. Les nouveaux navigateurs étaient bloqués parce que les sites ne les reconnaissaient pas.
Alors les navigateurs ont commencé à mentir. "Je suis compatible avec Mozilla" est devenu standard. "Je suis compatible avec AppleWebKit" a été ajouté. Chaque navigateur prétend être tous les autres navigateurs.
Ce que tu peux vraiment apprendre
Malgré le chaos, les user agents contiennent encore des informations utiles :
Nom et version du navigateur : Le vrai navigateur est généralement à la fin. "Chrome/120" ou "Firefox/121".
Système d'exploitation : "Windows NT 10.0" ou "Mac OS X 10_15_7" ou "Linux".
Type d'appareil : Les user agents mobiles incluent des noms d'appareils ou "Mobile".
Identification de bot : Googlebot, Bingbot et autres crawlers s'identifient.
Motifs de détection courants
Chrome desktop :
...Chrome/120.0.0.0 Safari/537.36
Chrome mobile sur Android :
...Android 10; Pixel 4...Chrome/120.0.0.0 Mobile Safari/537.36
Safari sur iPhone :
...iPhone; CPU iPhone OS 17_0 like Mac OS X...Safari/605.1.15
Firefox :
...Firefox/121.0
Edge, Opera, Brave et autres sont basés sur Chrome et ressemblent à Chrome.
Pourquoi la détection de fonctionnalité est meilleure
La détection de user agent répond "quel navigateur ?" La détection de fonctionnalité répond "ce navigateur peut-il faire X ?"
// Détection user agent (fragile)
if (navigator.userAgent.includes('Chrome')) {
// suppose fonctionnalités Chrome
}
// Détection de fonctionnalité (robuste)
if ('serviceWorker' in navigator) {
// utilise service workers
}
Les navigateurs changent. Les chaînes user agent sont modifiées. La détection de fonctionnalité fonctionne peu importe.
Quand les User Agents comptent encore
Analytiques. Comprendre ton audience : part de marché navigateur, mobile vs desktop, distribution OS.
Détection de bots. Identifier les crawlers et ajuster le comportement serveur.
Tests ciblés. Reproduire des problèmes signalés par des utilisateurs sur des navigateurs spécifiques.
Décisions de support legacy. Si 0,1% des utilisateurs utilisent IE11, peut-être tu arrêtes de le supporter.
Usurpation et confidentialité
Les user agents sont facilement falsifiés. Les extensions de confidentialité les modifient. Certains navigateurs laissent les utilisateurs les changer manuellement.
Ne compte pas sur les user agents pour la sécurité. Ce sont des indices, pas de l'authentification.
L'empreinte de navigateur combine user agent avec d'autres signaux (taille d'écran, polices, plugins) pour le tracking. C'est controversé et de plus en plus bloqué par les navigateurs.
Client Hints : L'alternative moderne
Les User-Agent Client Hints sont une approche plus récente. Les serveurs demandent des informations spécifiques :
Sec-CH-UA: "Chromium";v="120", "Google Chrome";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Mobile: ?0
Structuré, fiable, respectueux de la vie privée. Mais l'adoption est encore en croissance.
Bibliothèques d'analyse
N'analyse pas les user agents avec des regex. Les cas limites te battront.
Utilise des bibliothèques établies qui maintiennent des bases de données de motifs :
- ua-parser-js (JavaScript)
- user-agents (Python)
- DeviceDetector (PHP)
Celles-ci gèrent le désordre historique et se mettent à jour quand de nouveaux navigateurs apparaissent.
Les user agents sont utiles pour les analytiques et diagnostics mais peu fiables pour les décisions de fonctionnalité. Analyse-les avec des bibliothèques, préfère la détection de fonctionnalité pour la fonctionnalité, et rappelle-toi que n'importe quel utilisateur peut falsifier son user agent.