Парсинг user agent ломается не в regex, а на пограничных строках и мобильных webview
UA-строка выглядит простой, пока не упираешься в bot-трафик, встраиваемые браузеры и кастомные клиенты. Большинство ошибок одинаковые: библиотека определяет семейство браузера, но теряет движок, путает версию рендера с версией приложения или считает webview за обычный Chrome.
Базовое правило: не верь одному полю. Сверяй минимум три признака — семейство, платформу, mobile/desktop. Если библиотека отдает «Chrome/Android», а по fingerprint виден iOS-стек, значит источник уже грязный. Для антифрода и трекинга это важнее красивого названия браузера.
Подводные камни: старые движки часто режут UA до шаблона; прокси-сетки добавляют мусор в заголовки; iOS webview может маскироваться под Safari, но не совпадать по экрану, touch и navigator.vendor. Отдельно проверяй, как библиотека обрабатывает пустые, обрезанные и подмененные строки — именно они чаще всего прилетают в логах.
Практика простая: держи allowlist по реальным связкам, а не по одному regex; логируй сырой UA вместе с распарсенной структурой; для спорных кейсов сравнивай UA с client hints и fingerprint. Если парсер не умеет объяснить расхождение, он только создает иллюзию точности.
Tracker Lab
@tracker_lab
Парсинг user agent ломается не в regex, а на пограничных строках и мобильных webview
Этот пост опубликован в Telegram-канале Tracker Lab. Подписаться можно по ссылке: @tracker_lab.