Le ticket dit « ça marche pas sur Safari ». On lit la chaîne. Chrome sous iOS se présente en `CriOS` et reprend beaucoup de tokens Safari. Ne bloquez pas un client, et n’en faites pas une preuve d’identité.
Le support colle Mozilla/5.0 (iPhone; CPU iPhone OS …) et le log nginx affiche la même famille de chaînes. Le job : nommer une famille de navigateur, un OS, un indice mobile / tablette / bureau — assez pour reproduire un bug, pas assez pour un dossier.
Encode64, côté outils FR : tickets, journaux d’accès, triage de crawlers, QA. Toute l’analyse est heuristique. Il n’existe pas de « vérité unique » derrière Mozilla/5.0 : le token est historique, repris par WebKit, puis Chrome, puis Edge.
Un code HTTP : référence HTTP. Un plan d’adressage : sous-réseau IPv4. Bloquer un crawl : robots.txt.
Lire une ligne nginx ou un ticket
Le log_format nginx classique enregistre "$http_user_agent" à la fin de la ligne combined. Encode64 rappelle l’extraction :
awk -F'"' '{print $6}' /var/log/nginx/access.log | head
Collez une chaîne brute, pas tout le fichier. On n’est pas GoAccess (ITwars, wiki Evolix) : pas de top navigateurs, pas de bande passante, pas de 404 agrégés.
Cas fréquents en France :
- Ticket « Safari » alors que la chaîne contient
CriOS: c’est Chrome sur iPhone, moteur WebKit. Edg/au milieu d’une soupeChrome/… Safari/…: Edge, pas « Chrome tout court ».- Une UA vide,
curl,wget, ou un bot qui se prétend Chrome. - Desktop Chrome avec une version gelée : la chaîne ment ; les Client Hints (
Sec-CH-UA,Sec-CH-UA-Platform,Sec-CH-UA-Mobile) portent le détail — et seulement si le serveur a envoyéAccept-CHen HTTPS (DeviceAtlas le décrit pour nginx).
Cette page ne récupère pas les hints de vos visiteurs. Elle tokenize ce que vous collez.
Ce que la chaîne ne prouve pas
- Une identité. Pas une preuve juridique, pas un fingerprinting, pas un inventaire matériel opposable. La CNIL n’a pas besoin d’un parseur UA pour un traitement de données : l’UA seul n’identifie pas une personne de façon fiable, et s’en servir pour profiler serait un autre sujet.
- Un bot « officiel ».
Googlebotdans la chaîne n’est pas une vérif. Inverse + direct DNS sur l’IP. - Une décision de sécu. Allowlist, débit, auth : l’attaquant envoie ce qu’il veut.
- Un modèle d’iPhone précis. Les UA réduites et les tokens hérités (
AppleWebKit,KHTML, like Gecko) laissent des champs en « inconnu » — c’est préférable à une invention.
Si vous variez le HTML selon l’UA, attention au cache CDN : Encode64 le note, une Vary trop large explose les clés. Côté front, préférez la détection de fonctionnalités.
Comment l’utiliser
- Collez la chaîne issue de DevTools, du ticket ou d’une ligne nginx.
- Lisez famille / OS / classe d’appareil comme des indices. Recoupez avec une capture d’écran.
- Un 404 / 502 : la référence HTTP. Un crawler à calmer : robots.txt, puis Search Console — pas un blocage « si Safari alors 403 » fondé sur ce parseur.
C’est un décodeur de chaîne, pas un labo forensique.