La première fois que j'ai dû donner un sens à une chaîne User-Agent en masse, c'était lors d'un projet SEO wpadminify.com« , regardant un journal d'accès au serveur essayer de déterminer quelle part du trafic était constituée de vraies personnes et quelle quantité était constituée de robots d'exploration. J'avais une colonne de chaînes avec laquelle tout commençait Mozilla/5.0[TRADUCTION] ?, tous ont mentionné Safari, et la moitié d'entre eux mentaient sur le fait d'être un navigateur tout en étant un autre En les lisant à l'œil nu était désespéré C'est le travail qu'un analyseur User-Agent fait, et après l'avoir fait à la dure beaucoup trop de fois j'en ai intégré un Toolz.dev. C’est le guide qui y est donné, ainsi que la tête étonnamment désordonnée derrière lui.
tl;dr : Les Toolz analyseur d'agent utilisateur prend une chaîne User-Agent et la divise en navigateur, moteur de rendu, système d'exploitation, type de périphérique et architecture CPU Il applique l'ordre de détection l'en-tête' ; s bizarrerie la demande, donc Edge n'est pas mal lu car Chrome et Safari mobile est lu à partir de son jeton de version réelle Il signale également les robots connus Tout s'exécute côté client : pas de téléchargement, pas d'inscription, sans danger pour les lignes de journal réelles.
Qu'est-ce qu'une chaîne User-Agent ?
Une chaîne User-Agent est la valeur du User-Agent en-tête de requête qu'un navigateur ou un client HTTP envoie avec presque toutes les requêtes L'en-tête est défini dans RFC9110[traduction], la spécification HTTP Semantics, qui la décrit comme une séquence d'identifiants de produits et de commentaires qui permettent à un serveur d'identifier le logiciel faisant la demande En pratique, il nomme le navigateur, sa version, le moteur de rendu, le système d'exploitation, et souvent l'appareil.
L'intention était raisonnable : donner aux serveurs un moyen de savoir ce qui se connecte afin qu'ils puissent adapter les réponses ou recueillir des statistiques La réalité est que la chaîne est devenue l'un des éléments de données autodéclarées les moins fiables sur le Web, non pas parce qu'elle est malveillante mais parce que deux décennies de piratages de compatibilité ont superposé jeton sur jeton jusqu'à ce que la lecture évidente soit généralement la mauvaise.
Voici une chaîne Chrome moderne sous Windows :
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
Il prétend être Mozilla, mentionne AppleWebKit, et se termine par le mot Safari Ce n'est rien de tout cela ; c'est Chrome Chaque jeton avant Chrome/126 est-ce un sédiment historique Un analyseur existe précisément parce que vous ne pouvez pas faire confiance aux jetons qui semblent les plus autoritaires.
Pourquoi l'analyse d'un agent utilisateur est-elle si sujette aux erreurs ?
L'en-tête a grandi par imitation Dans les premières guerres de navigateur, les serveurs vérifiaient l'agent utilisateur pour décider quelle version d'une page envoyer, et ils vérifiaient maladroitement, souvent avec une simple correspondance de sous-chaîne Un nouveau navigateur qui voulait recevoir la bonne page moderne devait contenir le jeton recherché par le serveur, donc chaque navigateur copiait le gagnant précédent Netscape s'appelait Mozilla, donc Internet Explorer prétendait être compatible avec Mozilla Lorsque les navigateurs WebKit sont arrivés, ils portaient les jetons Mozilla et KHTML. Chrome forké depuis WebKit et conservait à la fois AppleWebKit et Safari afin que les serveurs de webKit-sniffing puissent bien traiter une seule ligne.
Cela crée des pièges concrets pour quiconque lit la ficelle :
- Edge et Opera contiennent tous deux
Chrome. Microsoft Edge ajouteEdg/126.0.0.0et Opera ajouteOPR/(en), mais les deux portent aussi le pleinChrome/126jeton car ils sont à base de Chrome Testez d'abord pour Chrome et vous étiqueterz chaque utilisateur Edge et Opera comme Chrome. - Safari cache sa version réelle. Sur le bureau et sur iOS, Safari rapporte sa version destinée aux utilisateurs dans un
Version/17.5jeton, tandis que leSafari/604.1le jeton vers la fin est le numéro de build WebKit, pas la version du navigateur LireSafari/comme la version et vous obtenez un nombre dénué de sens. - Chrome sur iOS n'est pas Chrome' ; moteur s. Apple exige que tous les navigateurs iOS utilisent WebKit, c'est pourquoi Chrome sur un iPhone le signale
CriOSet exécute WebKit, pas Blink. Firefox sur iOS l'estFxiOS, également WebKit. - Windows 11 n'existe pas dans la chaîne. Microsoft n'a jamais heurté le jeton du noyau NT, c'est pourquoi Windows 10 et Windows 11 font rapport
Windows NT 10.0. La chaîne ne peut pas du tout les distinguer.
Un analyseur est une petite pile de règles ordonnées qui connaissent ces pièges C'est vraiment tout ce que c'est, mais obtenir la bonne commande, c'est tout le jeu.
Comment fonctionne l'analyseur d'agent utilisateur Toolz ?
le analyseur exécute une séquence de vérifications dont l'ordre code les pièges ci-dessus Il recherche les navigateurs qui intègrent un autre navigateur' ; s jeton d'abord Edge avant Chrome, Opera avant Chrome, Samsung Internet et UC Browser avant Chrome, donc l'emprunté Chrome token ne gagne jamais par accident Il lit Safari de son Version/ jeton plutôt que son Safari/ construire un jeton. Il reconnaît les variantes iOS CriOS et FxiOS comme Chrome et Firefox respectivement tout en signalant correctement leur moteur comme WebKit.
Pour le système d'exploitation, il mappe le numéro du noyau Windows NT au nom marketing, donc Windows NT 6.1 devient Windows 7 et Windows NT 10.0 devient Windows 10 ou 11, énoncé honnêtement comme une paire parce que la chaîne ne peut véritablement pas les distinguer Il restaure la forme en pointillés des versions iOS et macOS, que l'en-tête écrit avec des traits de soulignement comme 17_5« Et il reconnaît Android, Chrome OS et Linux ».
Pour l'appareil, il classe la demande comme ordinateur de bureau, mobile, tablette ou bot. La règle de la tablette est la règle du violon : un iPad est une tablette, un appareil Android sans le Mobile token est une tablette et tout ce qui correspond Mobile, iPhone, ou Windows Phone est un téléphone. Lorsque la chaîne expose un modèle d'appareil, tel qu'une chaîne de construction Android ou un nom de produit Apple, l'analyseur le fait surface.
Il signale également les robots. C'est le champ que j'atteins pour la plupart, car lorsque vous lisez un journal d'accès, la question la plus utile est de savoir quelle part du trafic est automatisée. L'analyseur correspond à un large ensemble de signatures couvrant les robots de recherche, les récupérateurs d'aperçus sociaux et les clients de ligne de commande.
Que peut vous dire un User-Agent, et qu'est-ce qu'il ne peut pas ?
Il vaut la peine d'être précis sur les limites, car traiter la chaîne comme un fait conduit à de mauvaises décisions.
| Question | L'UA peut-elle y répondre ? | notes |
|---|---|---|
| Quelle famille de navigateurs | Habituellement oui | Avec ordre de détection correct |
| Version du navigateur exacte | Habituellement oui | De plus en plus congelé ou réduit |
| Nom du système d'exploitation | Habituellement oui | Windows 10 contre 11 est impossible |
| Type d'appareil | À peu près | Heuristique, non garanti |
| Modèle d'appareil exact | Parfois | Seulement lorsque la chaîne l'inclut |
| Si le client est authentique | non | Trivialement usurpable |
| Taille ou capacités de l'écran | non | Utilisez plutôt la détection de fonctionnalités |
Les deux dernières lignes comptent le plus Un agent utilisateur est auto-rapporté et peut être modifié en une seule ligne de code, défini par n'importe quel client HTTP, ou gelé par le navigateur pour des raisons de confidentialité Un grattoir peut s'annoncer comme Chrome sous Windows et il n'y a rien dans la chaîne pour le contredire Donc le résultat analysé vous indique ce que le client prétend être, ce qui est utile pour les statistiques et le débogage mais n'est la preuve de rien Lorsque vous avez besoin de savoir ce qu'un navigateur peut réellement faire, de détection de fonctionnalités en JavaScript plutôt que de déduire des capacités à partir du nom C'est le même principe derrière l'écriture de code front-end résilient que le Boîte à outils pour les développeurs Web roundup revient à plusieurs reprises.
Les chaînes User-Agent disparaissent-elles ?
Pas exactement, mais ils sont délibérément réduits Les navigateurs Chromium gèlent et coupent la chaîne héritée depuis quelques années, plafonnant le niveau de détail qu'elle expose, en particulier les numéros de version mineurs et certaines spécificités de la plate-forme Le remplacement est Conseils client utilisateur-agent(en), un mécanisme où le serveur demande exactement les informations client dont il a besoin à travers Sec-CH-UA en-têtes de demande et le navigator.userAgentData API JavaScript, plutôt que de recevoir une longue chaîne, il doit analyser. Client Hints est également l'endroit où la distinction Windows 10 contre 11 devient enfin disponible, via Sec-CH-UA-Platform-Version.
Le résultat pratique pour les prochaines années est que les deux existent Le classique User-Agent header est toujours livré sur chaque requête de chaque navigateur et de chaque client non navigateur, et beaucoup d'outils, d'analyses et de logique côté serveur le lisent encore. Ainsi, l'analyse de la chaîne reste le moyen le plus portable d'identifier un client, même si les données les plus riches sont transférées vers les indices client. Si vous créez quelque chose de nouveau et souhaitez la version de la plate-forme avec précision, lisez les indices client ; si vous analysez un journal existant ou prenez en charge le plus large éventail de clients, analysez la chaîne.
Comment utiliser l'analyseur ?
Le flux est délibérément simple Collez une chaîne User-Agent dans la boîte, ou cliquez sur l'un des échantillons intégrés pour voir une chaîne de bureau, mobile ou bot représentative Pour saisir la vôtre, ouvrez la console de votre navigateur et tapez navigator.userAgent(en anglais), collez ensuite le résultat Au fur et à mesure que vous tapez, le navigateur, le moteur, le système d'exploitation, le type d'appareil, l'architecture du processeur et la mise à jour du drapeau de bot en direct, sans bouton sur lequel appuyer Lorsque vous voulez le résultat ailleurs, copiez-le sous forme d'une table séparée par tabulations qui colle proprement dans une feuille de calcul ou un rapport de bug.
Parce que le tout s'exécute dans votre navigateur, vous pouvez coller des lignes de journal d'accès brutes ou de vraies chaînes de visiteurs sans qu'aucune d'entre elles ne quitte votre machine Ce modèle côté client est délibéré et est le même derrière chaque outil du site, expliqué dans le outils en ligne de confidentialité des données guide. Pour un identifiant, vous déboguez parallèlement à une demande, le générateur d'authentification de base et le Décodeur JWT suivez la même approche sans téléchargement.
Où l'analyseur s'adapte aux autres outils Web
L'analyseur d'agent utilisateur se trouve dans un petit groupe d'outils de demande et de réponse sur le site. Lorsque vous inspectez le trafic vers un domaine, le recherche domaine outil répond à qui appartient et l'exploite Lorsqu'une requête transporte un jeton porteur que vous devez inspecter, le Décodeur JWT lit les revendications à partir de celui-ci Lorsque vous construisez une requête authentifiée en premier lieu, le générateur d'authentification de base construit le Authorization en-tête. Et lorsque vous travaillez sur la façon dont une page se présente aux robots d'exploration, qui lisent vos pages sous leurs propres agents utilisateur, le générateur de balises méta façonne les tags qu'ils consomment.
Pour quiconque rassemble un ensemble personnel de ceux-ci, le Outils de productivité des développeurs le guide explique comment les utilitaires basés sur un navigateur sur le site s'intègrent dans une journée de travail. L’intérêt de les maintenir ensemble est que le débogage d’une interaction HTTP implique rarement une seule de ces questions.
Un workflow pratique : lecture d'un journal de trafic
Laissez-moi rendre cela concret avec la tâche qui m'a lancé sur cette route Vous avez exporté une tranche de votre journal d'accès et vous voulez le comprendre L'approche naïve est de regarder la colonne Utilisateur-Agent, qui est exactement là où les pièges mordent Un robot qui s'identifie poliment comme Googlebot c'est facile, mais un grattoir sans tête s'annonçant comme une version Chrome normale semble identique à un vrai visiteur jusqu'à ce que vous vérifiiez les autres signaux.
L'analyseur aide de deux manières. Premièrement, l'indicateur de robot capture immédiatement les robots d'exploration honnêtes et les clients d'automatisation courants, afin que vous puissiez séparer le trafic machine évident du trafic humain en un seul passage. Deuxièmement, la panne correcte du navigateur et du système d'exploitation du trafic restant vous indique quelque chose de réel sur votre public : s'il biaise le mobile, quels systèmes d'exploitation dominent, si un ancien navigateur compte encore suffisamment pour être testé. Sur le travail WP Adminify, cette panne a modifié les navigateurs que nous avons priorisés pour les tests et a confirmé qu'une partie de ce qui ressemblait à du trafic organique était un aperçu et une surveillance des robots plutôt que des lecteurs. L'analyse des chaînes a transformé un mur de bruit en décision.
La seule discipline à conserver est celle de la section limites : le résultat analysé est une réclamation, pas une preuve Un grattoir déterminé forgera une chaîne convaincante, et aucun analyseur ne peut attraper celle-ci du seul User-Agent Combinez l'analyse avec des modèles de demande, taux et autres signaux lorsque les enjeux sont élevés Pour les statistiques quotidiennes et le débogage, cependant, une analyse correcte est exactement ce dont vous avez besoin, et le faire à la main est l'erreur.
Que me disent le moteur de rendu et les champs CPU ?
Deux des champs analysés reçoivent moins d'attention que le navigateur et le système d'exploitation, mais les deux sont utiles Le moteur de rendu est le composant qui transforme réellement HTML et CSS en pixels, et c'est un meilleur prédicteur du comportement d'une page que le nom de Chrome, Edge, Opera, Brave, Samsung Internet, et la plupart des autres partagent le moteur Blink, donc un bug de rendu qui apparaît dans l'un d'entre eux apparaît généralement dans tous ; Firefox utilise Gecko ; et Safari, ainsi que chaque navigateur sur iOS, utilise WebKit. Lorsque vous triez un bug de mise en page, le regroupement de votre trafic par moteur plutôt que par nom de navigateur vous indique combien de chemins de rendu véritablement distincts vous avez à tester, ce qui est souvent juste trois.
L'analyseur dérive le moteur des jetons de la plate-forme plutôt que de l'étiquette du navigateur, c'est pourquoi il peut signaler Blink pour un navigateur Chromium et WebKit pour Safari même si les deux descendent du même jeton AppleWebKit Il attrape également les anciens moteurs, Trident pour Internet Explorer et EdgeHTML pour Edge hérité, qui apparaissent toujours dans les journaux d'entreprise.
Le champ Architecture CPU lit les jetons de la plateforme pour x86_64, Win64, arm64« , et leurs proches, signalant si le client est une machine 64 bits, 32 bits ou ARM. C'est le domaine pour vérifier quand vous diffusez des téléchargements spécifiques à la plate-forme et que vous devez savoir quelle construction un visiteur peut exécuter, et c'est un signal silencieux de la modernité de votre public et du matériel n°39 ;s. ».
Questions fréquentes
Qu'est-ce qu'une chaîne User-Agent ? Une chaîne User-Agent est la valeur de l'en-tête HTTP User-Agent qu'un navigateur ou un client envoie à chaque requête Il s'agit d'une liste de jetons de produits nommant le navigateur, son moteur de rendu, le système d'exploitation, et souvent l'appareil, défini dans la RFC 9110. les serveurs la lisent pour identifier le logiciel qui s'y connecte.
Comment puis-je trouver mon propre agent utilisateur ? Ouvrez votre navigateur' ; s console de développeur et tapez navigateur.userAgent, puis appuyez sur Entrée La chaîne qu'il imprime est exactement ce que votre navigateur envoie aux serveurs Collez-la dans l'analyseur de l'agent utilisateur pour voir le navigateur, le système d'exploitation et l'appareil vers lequel elle décode.
Pourquoi Chrome' ; s User-Agent contient-il le mot Safari ? Pour la compatibilité ascendante Chrome a dérivé son moteur d'Apple' ; s WebKit, et les premiers serveurs ont vérifié le jeton Safari avant de servir les pages modernes, alors Chrome l'a conservé pour éviter d'être déclassé. La même histoire est la raison pour laquelle presque tous les navigateurs commencent encore leur chaîne avec Mozilla/5.0.
Un agent utilisateur peut-il informer Windows 10 depuis Windows 11 ? Non. Les deux signalent Windows NT 10.0 car Microsoft n'a jamais incrémenté le jeton du noyau NT pour Windows 11, de sorte que la chaîne à elle seule ne peut pas distinguer les deux. La manière moderne de les distinguer est les indices client d'agent utilisateur, en particulier l'en-tête Sec-CH-UA-Platform-Version.
Un agent utilisateur est-il fiable pour identifier un appareil ? C'est un indice utile, pas une preuve Les User-Agents peuvent être modifiés en une ligne de code, définie par n'importe quel client HTTP, usurpée par des grattoirs ou gelée par le navigateur pour plus de confidentialité Traitez le résultat analysé comme ce que prétend être le client, et combinez-le avec d'autres signaux lorsque la précision compte.
Comment l'analyseur détecte-t-il les robots et les robots d'exploration ? Il fait correspondre la chaîne à une large liste de signatures connues, y compris des robots d'exploration de recherche comme Googlebot et Bingbot, des récupérateurs d'aperçu social et des clients d'automatisation comme curl, wget et Chrome sans tête. Toute correspondance définit le drapeau du bot et classe l'appareil comme un robot d'exploration.
Est-il sécuritaire de coller le journal de production User-Agents ici ? Oui. Toute analyse a lieu dans votre navigateur avec JavaScript et la chaîne n'est jamais envoyée à aucun serveur. Vous pouvez coller des lignes de journal d'accès brutes ou de véritables agents utilisateur visiteurs sans qu'ils quittent votre appareil.
Les chaînes User-Agent sont-elles obsolètes ? L'en-tête est gelé et réduit, pas supprimé Les navigateurs Chromium captent maintenant les détails dans la chaîne héritée et exposent des données plus riches via des indices client utilisateur-agent à la place La chaîne classique est toujours livrée sur chaque requête, donc l'analyse reste le moyen le plus portable de lire les détails du client.



