Парсер User-Agent

Вставьте любую строку User-Agent и считайте браузер, движок рендеринга, операционную систему, класс устройства и архитектуру CPU с копируемым разбором в JSON.

Превратите строку User-Agent во что-то читаемое. Ваш собственный User-Agent загружается по умолчанию. Вставьте любую другую строку, чтобы увидеть, как она разлагается, и скопируйте разбор JSON для отчёта об ошибке или тестового фикстура.

Браузер
Движок
Операционная система
Тип устройства
Архитектура CPU

Почему строки User-Agent выглядят так

Три десятилетия притворства друг другом

Современный User-Agent — это не описание, а ископаемая летопись. Почти каждый настольный браузер всё ещё открывается Mozilla/5.0, токеном, который ничего не значит с тех пор, как Netscape проиграл браузерную войну. Он выживает, потому что ранние серверы искали Mozilla перед тем, как отдавать фреймы, поэтому каждый конкурент добавлял токен, чтобы избежать понижения. Как только один браузер лжёт, чтобы получить хорошую версию страницы, остальные должны лгать так же или терять пользователей.

Та же спираль породила остаток строки. Chrome отправляет AppleWebKit/537.36 (KHTML, like Gecko), хотя перестал использовать WebKit в 2013 году, а KHTML мёртв ещё дольше. Edge добавляет Edg/ вместо Edge/ специально потому, что слишком многие сайты проверяли подстроку на старый токен и отдавали сломанный запасной вариант. Реальная версия Safari скрыта в токене Version/, а завершающий Safari/537.36 заморожен. Именно поэтому разбор должен идти от самого конкретного к наименее: каждый форк Chromium тоже утверждает, что он Chrome, и каждый WebKit-браузер тоже утверждает, что он Safari, поэтому должно победить первое уверенное совпадение.

Чему можно и нельзя доверять

Строка — это заголовок, предоставляемый клиентом, то есть это подсказка, а не доказательство. Любой HTTP-клиент может отправить что угодно, и пользователи регулярно подделывают её через расширения или инструменты разработчика. Воспринимайте её как диагностический цвет в логе, а не как вход авторизации или границу безопасности.

Даже когда никто не лжёт, значения становятся всё грубее. Chrome и Edge теперь замораживают минорные сегменты версии на 0.0.0 и сообщают урезанную строку платформы, поэтому Windows NT 10.0 покрывает и Windows 10, и Windows 11, а macOS закреплён на 10_15_7 годами независимо от фактического релиза. Firefox аналогично округляет детали ОС. Если номер версии выглядит подозрительно круглым, скорее всего, так и есть.

Определение устройства — самая шаткая часть. В строке нет поля устройства; оно выводится из наличия или отсутствия токенов вроде Mobile, iPad или Tablet. Планшеты Android — классическая ловушка, поскольку многие определяются только по отсутствию токена Mobile, а iPadOS намеренно представляется настольным Mac в своей конфигурации по умолчанию.

Используйте определение возможностей, в основном

Для всего, что меняет поведение, проверяйте возможность, а не ярлык. if ('share' in navigator) — правильно и долговечно; if (isSafari) ломается, как только другой движок выпустит тот же API или Safari выпустит исправление. Для вёрстки CSS-медиазапросы описывают реальную область просмотра и метод ввода гораздо лучше, чем когда-либо догадка об устройстве.

Там, где User-Agent всё ещё заслуживает своего места, — аналитика, разбор сбоев и воспроизведение ошибок. Знание того, что трассировка стека появляется только на Gecko или что поломка вёрстки ограничена Samsung Internet, превращает невоспроизводимый отчёт в конкретный тест-кейс. Современная замена — API User-Agent Client Hints, который раскрывает те же факты как структурированные значения и требует явного запроса для деталей с высокой энтропией, таких как полная версия платформы.

Примечание open source: реализовано на чистом JavaScript без сторонних библиотек.

FAQ

Почему Chrome говорит, что он Mozilla и Safari одновременно?
Историческая совместимость. Серверы когда-то искали Mozilla перед отправкой современной разметки, а позже Safari перед отправкой WebKit-специфичного CSS. Каждый браузер добавил эти токены, чтобы избежать отдачи ухудшенной страницы, и удаление их сейчас сломало бы сайты, которые всё ещё проверяют.
Можно ли доверять User-Agent для решений безопасности?
Нет. Это заголовок запроса, который клиент полностью контролирует и может установить в любое значение. Используйте его только для диагностики и статистики. Всё, что ограничивает доступ или применяет политику, должно полагаться на аутентификацию, а не на самоотчётную строку.
Почему моя версия macOS сообщается как 10.15.7?
Safari и Chrome намеренно замораживают сообщаемую версию macOS на 10_15_7, чтобы уменьшить поверхность отпечатков. Браузер знает реальную версию, но не поместит её в заголовок. Client Hints может раскрыть её, но только когда сайт явно запрашивает.
Как инструмент отличает планшет от телефона?
Он ищет токен iPad, строку Android без токена Mobile или явный маркер Tablet. Это отражает то, что делает большинство библиотек, но по сути это эвристика. Некоторые планшеты Android неотличимы от больших телефонов только по строке.
Отправляет ли это мой User-Agent куда-либо?
Нет. Разбор выполняется полностью в вашем браузере с помощью регулярных выражений, и ничего не загружается. Значение по умолчанию читается локально из navigator.userAgent и никогда не покидает страницу.
Что использовать вместо определения по User-Agent?
Определение возможностей для функций, CSS-медиазапросы для вёрстки и API User-Agent Client Hints, когда вам действительно нужны факты платформы. Client Hints дают структурированные значения и держат детали с высокой энтропией за явным согласием.