Инструменты
Руководства

Парсер User-Agent

Разработка

Разбирает строку User-Agent на браузер, движок, ОС и тип устройства. Эвристика, полностью на клиенте.

100 % на клиенте Без бэкенда
Строка 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), поэтому движок выводится из семейства браузера, а не сопоставляется напрямую.

Как пользоваться#

  1. Нажмите Использовать мой браузер вверху, чтобы загрузить в поле ввода navigator.userAgent этого браузера — быстрейший способ увидеть, как выглядит ваш собственный трафик.
  2. Или вставьте любую строку UA в панель ввода — из access-лога nginx, из req.headers["user-agent"] в вашем бэкенде, из запроса curl, откуда угодно.
  3. Читайте пять строк в панели вывода:
    • Браузер — имя семейства и старшая версия (например 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, …).
  4. Нажмите Очистить, чтобы опустошить обе панели.
  5. Строка состояния обобщает результат или сообщает, что ввод был пуст.

Ключевые возможности#

  • Детекция браузеров: сначала специализированные. 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-строка сохраняется в панели ввода, чтобы её можно было осмотреть.