User-Agent: определение браузера и устройства
Что такое User-Agent, структура, определение браузера, ОС, устройства, использование в аналитике.
Введение
Каждый раз, когда браузер открывает веб-страницу, он отправляет на сервер строку, которая рассказывает о себе: какой это браузер, какая операционная система, какое устройство и множество дополнительных технических деталей. Эта строка называется User-Agent и передаётся в одноимённом HTTP-заголовке. Несмотря на то что сегодня официальная политика — сокращать объём передаваемой информации, User-Agent остаётся одним из ключевых источников данных для аналитики, A/B-тестирования, адаптации интерфейса и обнаружения ботов.
В этой статье мы разберём, как устроена строка User-Agent, какие компоненты в ней можно распознать, почему её парсинг — это нетривиальная задача и как правильно определять браузер, ОС и устройство. Также мы рассмотрим современную замену — Client Hints — и обсудим, когда полагаться на User-Agent уже не стоит.
Что такое User-Agent
User-Agent — это HTTP-заголовок, который клиентское приложение (браузер, поисковый бот, мобильное приложение) отправляет с каждым запросом. Исторически строка формировалась так, чтобы сервер мог адаптировать ответ под возможности клиента: отдать мобильную версию, отказаться от неподдерживаемых CSS-свойств, изменить раскладку страницы.
Со временем строка User-Agent обросла «легаси» — совместимостью со старыми сайтами, которые проверяли наличие конкретных подстрок. Поэтому современные браузеры включают в User-Agent упоминания множества движков и платформ, чтобы не сломать старые снифферы.
Структура строки User-Agent
Унифицированного формата не существует, но де-факто строка состоит из нескольких продуктов, разделённых пробелами. Каждый продукт записывается в виде name/version и может быть заключён в скобки, где часто указываются уточняющие детали — операционная система, движок, устройство.
// Chrome на Windows 11
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
// Firefox на macOS
Mozilla/5.0 (Macintosh; Intel Mac OS X 14.2; rv:121.0) Gecko/20100101 Firefox/121.0
// Safari на iPhone
Mozilla/5.0 (iPhone; CPU iPhone OS 17_2 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.2 Mobile/15E148 Safari/604.1
// Googlebot
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)Токен Mozilla/5.0 в начале — это историческая совместимость: в 1990-е сайты проверяли его, чтобы отсеять старые браузеры. Сегодня эту строку включают все современные браузеры, и по ней нельзя сделать вывод о производителе.
Компоненты User-Agent
| Компонент | Пример | Что означает |
|---|---|---|
| Mozilla-токен | Mozilla/5.0 | Совместимость с историческим форматом; присутствует почти всегда |
| ОС и платформа | Windows NT 10.0; Win64; x64 | Операционная система, разрядность, архитектура |
| Движок рендеринга | AppleWebKit/537.36 | WebKit, Blink, Gecko — движок браузера |
| Браузер | Chrome/120.0.0.0 | Название и версия браузера |
| Устройство | iPhone; CPU iPhone OS 17_2 | Модель устройства (чаще всего только для мобильных) |
Определение браузера
Главная сложность парсинга User-Agent — порядок токенов зависит от браузера. В Chrome основной токен стоит в конце, а в Safari — в середине строки. Поэтому для корректного определения нужно проверять несколько сигналов и учитывать порядок их следования.
function detectBrowser(ua) {
ua = ua.toLowerCase();
// Edge (на Chromium) — проверить раньше Chrome
if (ua.includes('edg/')) return { name: 'Edge', engine: 'Blink' };
// Opera на Chromium
if (ua.includes('opr/')) return { name: 'Opera', engine: 'Blink' };
// Chrome / Chromium
if (ua.includes('chrome/')) return { name: 'Chrome', engine: 'Blink' };
// Firefox
if (ua.includes('firefox/')) return { name: 'Firefox', engine: 'Gecko' };
// Safari (после Chrome, чтобы не спутать)
if (ua.includes('safari/')) return { name: 'Safari', engine: 'WebKit' };
return { name: 'Unknown', engine: 'Unknown' };
}Порядок проверок критичен: Safari и Edge тоже содержат строку «Chrome», а Edge содержит «Safari». Поэтому проверки идут от специфичного к общему — иначе браузер будет определён неверно.
Определение операционной системы
function detectOS(ua) {
if (/windows nt 10/i.test(ua)) return 'Windows 10/11';
if (/windows nt 6.3/i.test(ua)) return 'Windows 8.1';
if (/mac os x/i.test(ua)) return 'macOS';
if (/iphone os/i.test(ua)) return 'iOS';
if (/android/i.test(ua)) return 'Android';
if (/linux/i.test(ua)) return 'Linux';
return 'Unknown';
}По User-Agent нельзя различить Windows 10 и Windows 11 — обе отдают одинаковую строкуWindows NT 10.0. Для точного определения ОС нужно использовать Client Hints (Sec-CH-UA-Platform-Version).
Определение устройства: мобильное, планшет, десктоп
function detectDevice(ua) {
ua = ua.toLowerCase();
if (/ipad|tablet|playbook|silk/i.test(ua)) return 'tablet';
if (/mobile|iphone|android.*mobile|windows phone/i.test(ua)) return 'mobile';
if (/android/i.test(ua) && !/mobile/i.test(ua)) return 'tablet';
return 'desktop';
}На iPad с iOS 13+ браузер по умолчанию запрашивает «десктопную» версию сайта, поэтому его User-Agent выглядит как на macOS. Чтобы отличить iPad от Mac, дополнительно проверяют наличие токенаMacintosh вместе с touch в User-Agent Client Hints.
Использование User-Agent в аналитике
Системы веб-аналитики (Яндекс.Метрика, Google Analytics) парсят User-Agent серверно и формируют отчёты по браузерам, устройствам и операционным системам. Эти данные помогают:
- понять, какие платформы преобладают у аудитории и оптимизировать под них в первую очередь;
- обнаружить аномальный трафик — например, всплеск запросов с одного User-Agent от бота;
- планировать поддержку браузеров: если доля Safari ниже 1 %, можно отложить внедрение фич с ограниченной поддержкой;
- настраивать A/B-тесты — показывать разные варианты интерфейса разным сегментам пользователей.
Боты и краулеры в User-Agent
Поисковые боты и социальные пауки обычно честно сообщают о себе. Это позволяет отделить их от обычных пользователей и не считать в конверсиях:
| Бот | Токен в User-Agent |
|---|---|
| Googlebot | Googlebot/2.1 |
| YandexBot | YandexBot/3.0 |
| Bingbot | bingbot/2.0 |
| DuckDuckBot | DuckDuckBot/1.1 |
| Facebook Bot | facebookexternalhit/1.1 |
| Twitter Bot | Twitterbot/1.0 |
| LinkedIn Bot | LinkedInBot/1.0 |
Однако не все боты честны — скрейперы и парсеры могут подделывать User-Agent, имитируя обычный браузер. Для защиты от них нужны дополнительные методы: анализ поведения, частоты запросов, отпечатки TLS, CAPTCHA.
Современная альтернатива: User-Agent Client Hints
Из-за проблем с приватностью и сложности парсинга индустрия переходит на User-Agent Client Hints — структурированные HTTP-заголовки, которые браузер передаёт по запросу сервера. Сервер объявляет интерес через Accept-CH, и браузер в следующих запросах присылает конкретные данные:
// Ответ сервера запрашивает нужные подсказки
Accept-CH: Sec-CH-UA, Sec-CH-UA-Platform, Sec-CH-UA-Mobile
// Следующий запрос от браузера
Sec-CH-UA: "Chromium";v="120", "Not.A/Brand";v="24", "Google Chrome";v="120"
Sec-CH-UA-Platform: "Windows"
Sec-CH-UA-Mobile: ?0Client Hints решают две проблемы: упрощают парсинг (значения приходят в структурированном виде) и уменьшают пассивный fingerprinting — браузер не передаёт всю информацию по умолчанию. Сегодня их поддерживают все браузеры на Chromium; Firefox и Safari пока реализуют частично.
Типичные ошибки при работе с User-Agent
- Проверка «если есть Chrome — значит Chrome» — строки Chrome есть также в Edge, Opera, Brave и других браузерах на Chromium.
- Игнорирование версий — поддержка CSS-фичи может появиться в Chrome 100, но отсутствовать в Chrome 90. Лучше использовать feature detection, чем сверять версии.
- Хранение «сырого» User-Agent в логах навсегда — он содержит персональные данные и может подпадать под GDPR; применяйте агрегацию или сокращённое хранение.
- Блокировка по User-Agent — это легко обойти подменой строки; используйте как дополнительный, а не единственный сигнал.
- Полагаться на User-Agent для критичных решений — например, для выдачи разных тарифов или контента; лучше использовать feature detection через JavaScript.
Заключение
User-Agent — это важный, но не всегда надёжный источник информации о клиенте. Его парсинг требует аккуратности: нужно учитывать исторические токены совместимости, порядок проверки браузеров и особенности мобильных платформ. Для новых проектов стоит сразу планировать переход на Client Hints, а User-Agent использовать как дополнительный источник данных.
Чтобы быстро разобрать строку User-Agent и увидеть браузер, ОС, устройство и движок, используйте нашUser-Agent parser — он работает в браузере, не требует установки и поддерживает тысячи различных строк, включая мобильные браузеры и поисковых ботов.
Попробуйте эти инструменты
Похожие статьи
Системы счисления: двоичная, восьмеричная, шестнадцатеричная
Позиционные системы счисления, конвертация между ними, использование в программировании.
Двоичная в десятичную: как конвертировать
Алгоритм перевода binary to decimal, степени двойки, примеры, использование в программировании.
Римские цифры: таблица и правила записи
Римская система счисления, символы, правила, запись больших чисел, история и современное использование.
Калькулятор процентов: как считать проценты
Виды расчёта процентов: от числа, процентное изменение, скидки, налоги, примеры.