User-Agent (сокращённо UA) — это поле в заголовке HTTP-запроса. Каждый раз, когда браузер (или краулер, или другой HTTP-клиент) отправляет запрос, он включает эту строку, чтобы сообщить серверу, кто я такой, содержащую название и версию браузера, операционную систему и версию, движок рендеринга, тип устройства, архитектуру CPU и многое другое. Серверы могут использовать UA для возврата контента, адаптированного для разных устройств, а разработчики часто используют UA для обработки совместимости, аналитики трафика и детекции ботов/краулеров.
Строки UA выглядят многословными и хаотичными по историческим причинам: ещё в эпоху браузерных войн новые браузеры заявляли о себе как о старых браузерах в своём UA, чтобы веб-сайты, созданные для старого браузерного сниффинга, работали корректно (например, Chrome включает идентификаторы Safari, а Safari включает идентификаторы Gecko). Наслоение устаревших токенов накапливалось, что затрудняло прямое чтение современных строк UA. Цель парсера UA — разбить эти сложные строки и извлечь действительно полезную информацию.
Основные браузеры имеют фиксированные форматы и идентификационные токены: Chrome содержит Chrome/версия, Firefox содержит Firefox/версия, Safari содержит Version/версия и маркеры Safari/, новый Edge использует Edg/, а встроенный браузер WeChat использует MicroMessenger/. Операционные системы также имеют соответствующие маркеры: Windows использует Windows NT + версия, macOS использует Mac OS X + версия, iOS использует CPU iPhone OS + версия, а Android напрямую использует Android + версия. Точная идентификация достигается через сопоставление регулярными выражениями по этим ключевым словам.
Движок рендеринга — это основной компонент, который браузер использует для парсинга HTML/CSS и рендеринга страниц: браузеры на основе Chromium (Chrome, Edge, Opera и другие) используют движок Blink, Safari использует WebKit, Firefox использует Gecko, а устаревший IE использует Trident. Знание движка рендеринга помогает диагностировать проблемы совместимости CSS/JS, поскольку Chrome и Edge демонстрируют высокосогласованное поведение рендеринга при общем движке Blink.
Детекция ботов/краулеров — одно из ключевых применений парсинга UA. Краулеры поисковых систем (Googlebot, Bingbot, Baiduspider), краулеры SEO-инструментов, вредоносные скрейперы, инструменты командной строки (curl, wget) и библиотеки скриптов (Python requests) — все включают свои собственные идентификаторы в UA или используют очень простые строки UA. Нечеловеческий трафик можно быстро идентифицировать по сопоставлению ключевых слов вроде bot, crawler, spider и curl.
Идентификация типа устройства в первую очередь опирается на мобильные индикаторы: UA, содержащие Mobile, iPhone или Android, — это мобильные телефоны; содержащие iPad, Tablet или Kindle — планшеты; всё остальное — десктопы. Однако важно отметить, что UA могут быть подделаны (подмена User-Agent). Вредоносные краулеры могут выдавать себя за обычные браузеры, поэтому строгая анти-краулинговая защита требует комбинации других сигналов, поскольку парсинг UA служит только первичным индикатором.
Информация об архитектуре CPU становится всё более важной сегодня: Mac на Apple M-серии используют архитектуру ARM64, традиционные Intel Mac используют x64; ПК на Windows бывают как x64, так и ARM64 (например, вычислительные платформы Snapdragon); мобильные устройства унифицированно ARM64. При предоставлении загрузок ПО, если вы можете определить архитектуру пользователя из UA и напрямую выдать соответствующий установщик (например, различая Intel/Apple Silicon .dmg или x64/ARM64 .exe), вы значительно улучшаете пользовательский опыт.
Важно отметить ограничения парсинга UA: UA могут быть изменены или подделаны пользователями или расширениями; новые версии браузеров могут изменять форматы UA, из-за чего шаблоны регулярных выражений перестают работать; Windows 11 невозможно отличить от Windows 10 через UA, поскольку он сохраняет номер версии NT 10.0; на iOS все сторонние браузеры (Chrome, Firefox для iOS) обязаны использовать движок WebKit, поэтому их UA несут идентификаторы Safari. Парсинг этого инструмента подходит для большинства сценариев, включая отладку разработки и анализ логов, но для контекстов с высокой безопасностью используйте многофакторное суждение, комбинируя IP, TLS-отпечатки и другие сигналы.