User-Agent
Применение
Клиенты включают User-Agent в каждый запрос, чтобы сообщить серверу о приложении, операционной системе и движке рендеринга. Серверы используют эти сведения для согласования содержимого, аналитики и подстройки под особенности совместимости.
Значение следует структурированному формату из продуктовых токенов. Каждый токен состоит из названия продукта и необязательной версии, за которыми идут необязательные комментарии в скобках. Несколько токенов разделяются пробелами.
User-Agent: <product>/<version> (<comment>) <product>/<version>
На практике строки User-Agent браузеров стали длинными и сложными из-за исторических схем совместимости. Большинство браузеров по унаследованным причинам указывают Mozilla/5.0 в качестве первого токена, затем сведения о платформе в комментарии, а после — токены движка и браузера.
Серверы, отдающие разное содержимое в зависимости от значения User-Agent, реализуют одну из форм согласования содержимого. Поисковые роботы идентифицируют себя через этот заголовок, что позволяет серверам применять логику, специфичную для краулеров. Системы обнаружения ботов анализируют шаблоны User-Agent, чтобы отличить автоматизированный трафик от посетителей-людей.
Семейство заголовков Sec-CH-UA предлагает структурированную альтернативу строке User-Agent. User-Agent Client Hints передают ту же информацию в разобранном, низкоэнтропийном виде. По умолчанию браузер отправляет минимальный набор подсказок, а сервер запрашивает дополнительные сведения через заголовок ответа Accept-CH. Это сокращает поверхность для пассивного снятия отпечатков по сравнению с полной строкой User-Agent.
product
Идентификатор продукта для клиентского программного обеспечения. По соглашению наиболее значимый продукт указывается первым.
version
Строка версии, связанная с предшествующим продуктовым токеном и отделённая косой чертой.
comment
Дополнительные сведения в скобках, обычно описывающие операционную систему, устройство или платформу. Комментарии располагаются после пары product/version.
Пример
Десктопный браузер отправляет строку User-Agent, содержащую платформу, движок рендеринга и версию браузера. Префикс Mozilla/5.0 — исторический артефакт, присутствующий во всех современных браузерах.
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.0.0.0 Safari/537.36
Мобильный браузер включает в раздел комментария сведения об устройстве и мобильной платформе.
User-Agent: Mozilla/5.0 (Linux; Android 14; Pixel 8) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.0.0.0 Mobile Safari/537.36
Сокращение UA в Chrome фиксирует минорную часть, сборку и патч на значении 0.0.0. Мажорная версия увеличивается с каждым выпуском.
Поисковые роботы используют для идентификации характерные значения User-Agent. В комментарии часто содержится URL, ведущий на документацию о краулере.
User-Agent: Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)
Bingbot использует вечнозелёную строку UA на базе Chromium. Компонент версии W.X.Y.Z обновляется автоматически, подстраиваясь под текущий выпуск Chrome.
Десктоп:
User-Agent: Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm) Chrome/W.X.Y.Z Safari/537.36
Мобильные устройства:
User-Agent: Mozilla/5.0 (Linux; Android 6.0.1; Nexus 5X Build/MMB29P) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/W.X.Y.Z Mobile Safari/537.36 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)
Инструменты командной строки и HTTP-библиотеки отправляют более короткие и простые значения.
User-Agent: curl/8.4.0
Собственные API-клиенты и боты указывают описательное название продукта, версию и контактный URL:
User-Agent: MyBot/1.0 (+https://example.re/bot)
Приватность
Строка User-Agent — значимый вектор для снятия отпечатка браузера. Сочетание браузера, версии, ОС и сведений о платформе образует почти уникальный идентификатор, который отслеживающие скрипты используют без cookie и явного согласия.
Инициатива Chrome по сокращению User-Agent фиксирует часть строки и переносит подробные сведения в Sec-CH-UA Client Hints, которые требуют явного согласия сервера через Accept-CH. Это переводит подробные данные о клиенте из пассивного раскрытия в режим активного согласования.
Серверам не следует полагаться на User-Agent при принятии решений, связанных с безопасностью, таких как аутентификация или контроль доступа. Клиенты управляют этим значением и подделывают строку без всякого труда.