appuyez sur ⌘K pour changer d’outil
NETWORK · HTTP

Parseur de UserAgent

Détecte le navigateur et l'OS depuis les chaînes user agent.

local
user-agent-parser
§01 À PROPOS DE CET OUTIL

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

  1. Collez une chaîne User-Agent. La vôtre est pré-remplie au chargement.
  2. 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 Gecko revendique 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 contient Mobile/15E148 : un test sur Mobi y correspond donc. La recherche d’iPad doit 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 jeton Mobile soit présent sur les téléphones et absent sur les tablettes. Une tablette Android est donc Android sans Mobile — 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 Chrome avant Edg. 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.

FAQ
La chaîne est-elle envoyée quelque part ?
Non. La détection consiste en des correspondances d'expressions régulières dans la page. Rien ne quitte votre navigateur, et l'outil fonctionne hors ligne une fois chargé.
Pourquoi mon UA Chrome mentionne-t-il aussi Safari et Mozilla ?
Compatibilité historique. Tous les navigateurs se déclarent Mozilla/5.0, ceux qui reposent sur Chromium se déclarent Safari pour la détection de fonctionnalités héritée de l'ère WebKit, et Edge, Opera et Samsung Internet se déclarent en outre Chrome. La chaîne est un empilement de mensonges de compatibilité : voilà pourquoi l'ordre d'analyse importe davantage que les motifs eux-mêmes.
Pourquoi un iPad récent est-il rapporté comme macOS ?
Parce que c'est ce qu'il envoie. Depuis iPadOS 13, Safari sur iPad demande les sites de bureau par défaut et son UA est indiscernable de celui d'un Mac. Le seul indice est maxTouchPoints, qui ne figure pas du tout dans l'UA — aucun analyseur d'UA ne peut donc trancher correctement.
Puis-je m'en servir pour détecter des fonctionnalités en production ?
Non. Détectez la fonctionnalité, pas le navigateur — `if ('share' in navigator)` plutôt qu'une comparaison de versions. L'analyse d'UA est faite pour l'analytique, le tri du support et l'analyse de journaux, où vous décrivez du trafic au lieu de décider d'un comportement.
Quelle confiance accorder au signalement de robot ?
Il attrape les robots honnêtes, et rien d'autre. Googlebot, curl et python-requests s'identifient tous. Un robot d'indexation qui veut passer inaperçu recopie à l'identique la chaîne d'un vrai navigateur, et aucun contrôle fondé sur l'UA ne le verra jamais.