Парсер User-Agent
РазработкаРазбирает строку User-Agent на браузер, движок, ОС и тип устройства. Эвристика, полностью на клиенте.
- Браузер
- Движок
- Операционная система
- Тип устройства
- Бот / краулер
На этой странице
Что такое парсер User-Agent?#
Строка User-Agent (UA) — это текст, который каждый браузер и HTTP-клиент добавляет к своим запросам, чтобы описать себя. Она же — печально известная неструктурированная мешанина: вендоры наслаивают исторические токены совместимости друг на друга, поэтому в одной современной строке Chrome одновременно содержатся слова Mozilla, AppleWebKit, KHTML, Gecko и Safari — ни одно из которых не означает, что браузер действительно является кем-то из них. Читать raw-UA на глаз долго и чревато ошибками, поэтому почти каждая аналитическая панель, инструмент access-логов и слой детекции ботов сначала пропускает его через парсер.
Эта страница берёт любую строку UA и расщепляет её на пять фактов, которые вам реально нужны: браузер (имя и версия), движок (ядро рендеринга), ОС (операционная система и версия), тип устройства (десктоп, мобильный или планшет) и isBot (похожа ли строка на краулер). Всё работает целиком в вашем браузере — вставьте строку из строки лога и читайте разбор, без обращения к серверу.
Причина, по которой детекция браузера сложнее, чем кажется, — порядок. Специализированные браузеры нужно проверять до Chrome, потому что их строки UA все содержат литерал Chrome для совместимости. Microsoft Edge, Opera, Samsung Internet, Vivaldi и CocCoc наивная проверка if (ua.includes("chrome")) ошибочно определит как Chrome. То же справедливо для движков: строка AppleWebKit встречается и в браузерах на Blink (Chrome, Edge, Opera), и в чисто WebKit-ных (Safari), поэтому движок выводится из семейства браузера, а не сопоставляется напрямую.
Как пользоваться#
- Нажмите Использовать мой браузер вверху, чтобы загрузить в поле ввода
navigator.userAgentэтого браузера — быстрейший способ увидеть, как выглядит ваш собственный трафик. - Или вставьте любую строку UA в панель ввода — из access-лога nginx, из
req.headers["user-agent"]в вашем бэкенде, из запроса curl, откуда угодно. - Читайте пять строк в панели вывода:
- Браузер — имя семейства и старшая версия (например
Chrome 120). - Движок — движок рендеринга (Blink, WebKit, Gecko, Trident).
- ОС — операционная система и версия, где её удаётся восстановить (например
Windows 10/11,iOS 17,Android 14). - Тип устройства —
desktop,mobileилиtablet, определяется по токенам вродеiPad,AndroidбезMobile,iPhone. - Бот —
Да/Нет, помечается по совпадению с идентификаторами краулеров (bot,crawl,spider,slurp,pingdom,headless,phantomjs,curl,wget,python-requests,axios, …).
- Браузер — имя семейства и старшая версия (например
- Нажмите Очистить, чтобы опустошить обе панели.
- Строка состояния обобщает результат или сообщает, что ввод был пуст.
Ключевые возможности#
- Детекция браузеров: сначала специализированные. Edge, Opera, Samsung Internet, Vivaldi, CocCoc и Firefox сопоставляются до Chrome и Safari, поэтому их не проглатывает молчаливо токен совместимости
Chrome. - Движок выводится из семейства. Blink против WebKit определяется по детектированному браузеру, а не хрупким прямым сопоставлением
AppleWebKit— поэтому строка Safari не определяется как Chrome. - Классификация типа устройства. Планшеты отличаются от телефонов по токену
iPadи различиюAndroid ... Mobile— те же эвристики, на которые опираются аналитические инструменты. - Флаг краулера. Строка Бот помечает те строки, которые обычно хочется исключить из человекоориентированных метрик, — поисковые краулеры, мониторы аптайма, headless-браузеры и HTTP-библиотеки.
- 100 % на стороне клиента. Строка UA никогда никуда не отправляется. Это также значит, что можно вставлять токены из продакшен-логов, не сливая их стороннему API парсинга.
Разбор примера#
Вставьте типичную строку Chrome-on-Windows из access-лога:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
и пять строк заполнятся так:
Browser Chrome 120
Engine Blink
OS Windows 10/11
Device desktop
Bot no
Теперь сравните со строкой Edge — обратите внимание на завершающий Edg/120:
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
Наивный парсер, проверяющий Chrome первым, здесь сообщит Chrome 120 — ошибётся. Эта страница проверяет Edg/ раньше Chrome/, поэтому та же строка корректно даёт Browser: Microsoft Edge 120, а движок остаётся Blink (Edge построен на Chromium).
Третий случай показывает путь бота. Скрипт проверки здоровья, отправляющий curl/7.81.0, помечается Bot: yes, хотя не несёт обёртки Mozilla, потому что curl — один из библиотечных токенов, которые ищет матчер ботов. Именно эта строка позволяет отделить трафик реальных пользователей от автоматического шума при разборе лога.
FAQ#
Почему мой браузер Edge определяется как «Microsoft Edge», а не «Chrome», хотя в UA есть слово Chrome?#
Потому что UA Edge намеренно включает Chrome/120.0.0.0, чтобы сайты, созданные для Chrome, обслуживали и Edge. Этот парсер проверяет токен Edg/ первым, затем Chrome/, поэтому побеждает специализированное семейство. Любой парсер, не упорядочивающий проверки так, ошибочно отнесёт каждый Chromium-дериватив к Chrome.
Можно ли доверять версии ОС из строки UA?#
До определённой степени. Windows схлопывает 10 и 11 в Windows NT 10.0, поэтому здесь они отображаются как 10/11. Версии iOS и macOS восстанавливаются из токена OS X_x_x, но исторически «замораживаются» в момент выхода. Трактовайте версию как сильную подсказку, а не гарантию, и не привязывайте к ней решения безопасности.
Достаточно ли надёжен флаг Бот, чтобы блокировать трафик?#
Нет — детекция ботов по UA — это удобство для анализа логов и фильтрации дашбордов, а не периметр безопасности. Вредоносные клиенты подделывают любой UA, в том числе вполне «человекоподобный». Используйте эту строку, чтобы отсеять очевидных краулеров и библиотек; для всего, что реально должно быть надёжным, применяйте rate limiting, аутентификацию и поведенческие проверки.
Парсер показывает «Неизвестно» для всего. Что я вставил?#
Либо пустую/пробельную строку, либо UA от клиента, которого этот парсер не распознаёт (некоторые десктопные приложения и SDK шлют собственные идентификаторы). В первом случае строка состояния сообщит, что ввод пуст; во втором браузер и ОС просто перейдут в Неизвестно, а тип устройства по умолчанию примет значение desktop. Raw-строка сохраняется в панели ввода, чтобы её можно было осмотреть.