Parseur de UserAgent
Détecte le navigateur et l'OS depuis les chaînes user agent.
Vue d’ensemble
Une chaîne User-Agent est l’autodescription du navigateur, et c’est l’un des champs les moins dignes de confiance de HTTP — d’une part parce que les clients mentent délibérément, d’autre part parce que trente années de contournements de compatibilité ont amené chaque chaîne à se déclarer plusieurs navigateurs à la fois.
Cet outil rapporte le navigateur et sa version, le système d’exploitation et sa version, une classe d’appareil, et si la chaîne se présente comme automatisée.
Utilisation
- Collez une chaîne User-Agent. La vôtre est pré-remplie au chargement.
- Lisez le navigateur, le système, l’appareil et le verdict sur les robots.
Pourquoi l’ordre de détection est tout le problème
Prenons une chaîne de Microsoft Edge :
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 Edg/120.0.0.0
Elle se déclare Mozilla, AppleWebKit, Chrome, Safari et Edge. Un analyseur qui
cherche Chrome en premier rapporte Chrome, et c’est exactement pour cette raison
qu’une très grande quantité de données analytiques sont fausses.
La règle consiste à tester d’abord le jeton le plus spécifique. Edg/ avant
Chrome/, OPR/ avant Chrome/, SamsungBrowser/ avant Chrome/, et Chrome/
avant Safari — parce que Chromium se déclare aussi Safari, alors que Safari ne
se déclare pas Chrome.
Le numéro de version doit lui aussi être tiré du jeton spécifique. Le
Chrome/120.0.0.0 d’Edge 120 est une version de Chromium, pas une version
d’Edge, et les deux divergent.
Anatomie de la chaîne
Lire un UA devient plus simple dès qu’on sait que presque chaque jeton s’y trouve pour des raisons historiques et non descriptives.
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
(KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Mozilla/5.0— tous les navigateurs le déclarent. Dans les années 1990, les serveurs vérifiaient la présence de « Mozilla » avant de servir des cadres : tout le monde s’est donc mis à le déclarer et personne n’a jamais pu arrêter.- Le bloc entre parenthèses — les détails de plateforme. Nom et version du système, architecture du processeur, et sur mobile le modèle de l’appareil. C’est la partie que les navigateurs tronquent aujourd’hui.
AppleWebKit/537.36 (KHTML, like Gecko)— figé à 537.36 dans tout Chromium depuis 2013. C’est une constante, pas une version.KHTML, like Geckorevendique une parenté avec deux moteurs de plus.Chrome/120.0.0.0— la version majeure de Chromium. Les composantes mineures sont délibérément mises à zéro.Safari/537.36— correspond au jeton WebKit. Présent pour que le code qui cherche Safari continue de fonctionner.
L’information utile tient dans un ou deux jetons ; le reste est du sédiment de compatibilité. Un analyseur qui traite la chaîne comme une description plutôt que comme un empilement de revendications se trompera.
Classification des appareils
La classe d’appareil est déduite des jetons, et les deux signaux qui comptent sont contre-intuitifs :
- L’iPad envoie
Mobile. L’UA d’un iPad contientMobile/15E148: un test surMobiy correspond donc. La recherche d’iPaddoit venir en premier, sinon toutes les tablettes sont rapportées comme des téléphones. - Les tablettes Android omettent
Mobile. La convention de Google veut que le jetonMobilesoit présent sur les téléphones et absent sur les tablettes. Une tablette Android est doncAndroidsansMobile— un test négatif, qu’il est facile d’oublier.
Cet outil teste iPad, Tablet et Android-sans-Mobile avant de tester les jetons
de téléphone : les tablettes sont donc classées comme des tablettes.
Ce qu’aucun analyseur ne peut réparer, c’est l’iPad en mode bureau. Depuis
iPadOS 13, Safari sur iPad envoie par défaut une chaîne macOS ; le seul élément
distinctif fiable est navigator.maxTouchPoints, qui ne figure pas dans l’UA. Si
la détection des tablettes importe pour votre application, lisez le nombre de
points de contact côté client plutôt que d’analyser la chaîne.
La chaîne rétrécit volontairement
Les navigateurs réduisent activement ce que l’UA révèle, parce que le même niveau de détail qui sert l’analytique permet aussi le fingerprinting.
Chrome a figé la version mineure à 0.0.0 et réduit la version du système. Safari
annonce une version de système fixe depuis des années. navigator.platform est
déprécié. Le remplacement s’appelle User-Agent Client Hints (Sec-CH-UA,
Sec-CH-UA-Platform, Sec-CH-UA-Mobile), qui envoie par défaut un petit
ensemble de valeurs et oblige le serveur à demander tout ce qui va au-delà.
La conséquence pratique est qu’un analyseur d’UA devient moins précis avec le temps, et c’est voulu. Traitez la version majeure du navigateur et la famille de système comme le signal durable, et tout ce qui est plus précis comme un bonus qui finira par cesser d’arriver. L’outil d’empreinte de navigateur montre les autres attributs que cette réduction cherche à protéger.
Exemples
- Une analytique où la part de Chrome est impossible. Vérifiez si votre
analyseur place
ChromeavantEdg. Ce seul défaut d’ordonnancement déplace plusieurs points de pourcentage de trafic d’un navigateur à l’autre. - Un ticket de support sans reproduction. Le système et la version du navigateur tirés de l’UA du déclarant suffisent généralement à cerner le problème.
- Filtrer les robots dans des journaux. Ceux qui s’identifient sont faciles ; soyez explicite sur le fait que le nombre obtenu est un plancher et non un décompte.
- Auditer un vieux verrou de version de navigateur. Une comparaison de versions écrite contre un UA est déjà peu fiable et empire à chaque réduction. Remplacez-la par un test de fonctionnalité.
Remarques
Les numéros de version avec des soulignés — macOS et iOS rapportent 10_15_7 —
sont normalisés avec des points. Cette différence de mise en forme est purement
cosmétique dans l’UA et ne porte aucun sens.
Unknown signifie qu’aucun motif n’a correspondu, ce qui est une réponse légitime
pour la chaîne d’un navigateur de niche, d’une WebView embarquée, d’une
bibliothèque cliente HTTP ou d’une extension d’usurpation produisant une
combinaison incohérente.
Le test de robot recherche bot, crawl, spider, slurp, curl, wget,
python et headless. C’est une description de ce que le client admet, pas un
contrôle de sécurité. Tout ce qui compte vraiment doit être appliqué côté serveur
avec des limites de débit et un défi, parce qu’un UA est une chaîne que le client
choisit. La politique de confidentialité décrit comment l’API de
ce site s’y prend.