User-Agent
User-Agent — это строка, передаваемая HTTP-клиентом (например, веб-браузером, поисковым роботом или мобильным приложением) в HTTP-запросе для идентификации себя перед сервером. Она содержит информацию о типе и версии программного обеспечения, операционной системе, языке и других технических характеристиках устройства, с которого отправляется запрос. Серверы используют эту информацию для адаптации контента (например, отображения мобильной версии сайта) или для статистики.
История
Происхождение термина связано с ранними протоколами передачи данных в сети ARPANET. Первоначально поле User-Agent использовалось для идентификации программ-клиентов, работающих с протоколами FTP и Gopher. С появлением Всемирной паутины (World Wide Web) и протокола HTTP в начале 1990-х годов поле было включено в спецификацию HTTP/1.0 (RFC 1945, 1996 год).
Первым веб-браузером, который начал передавать строку User-Agent, был NCSA Mosaic (1993 год). Его строка выглядела как NCSA_Mosaic/2.0 (Windows 3.1). Вскоре после этого появился браузер Netscape Navigator, который также использовал этот механизм. В 1995 году компания Microsoft выпустила Internet Explorer, и началась так называемая «война браузеров», в ходе которой производители начали модифицировать строки User-Agent для обхода серверных фильтров, что привело к значительному усложнению и раздуванию этих строк.
Со временем стандарт HTTP/1.1 (RFC 2616, 1999 год) закрепил формат поля, а в последующих версиях (HTTP/2, HTTP/3) его использование осталось обязательным для совместимости, хотя и с некоторыми изменениями в синтаксисе.
Формат и структура
Строка User-Agent в HTTP-запросе обычно представляет собой последовательность токенов, разделённых пробелами. Формат не является строго регламентированным, но исторически сложилась следующая общая структура:
Продукт/Версия (Комментарий)
- Продукт — название и версия основного приложения (например, браузера).
- Комментарий — необязательная часть в скобках, содержащая дополнительную информацию: операционную систему, архитектуру, язык, версию движка и т.д.
Пример для современного браузера Google Chrome на Windows 10:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Разбор на примере
- Mozilla/5.0 — исторический префикс, унаследованный от браузера Netscape. Практически все современные браузеры начинаются с этой строки для совместимости с серверами, которые отказывали в обслуживании не-Mozilla-клиентам.
- Windows NT 10.0; Win64; x64 — операционная система (Windows 10, 64-разрядная версия).
- AppleWebKit/537.36 — имя и версия движка рендеринга (WebKit), используемого браузером.
- KHTML, like Gecko — устаревшие идентификаторы, указывающие на совместимость с движками KHTML и Gecko (для обхода серверных фильтров).
- Chrome/120.0.0.0 — собственно браузер и его версия.
- Safari/537.36 — дополнительный идентификатор, указывающий на совместимость с Safari (также для обхода фильтров).
Классификация User-Agent
User-Agent можно классифицировать по типу клиента, который его отправляет:
Браузеры
Наиболее распространённая категория. Каждый браузер имеет свою уникальную строку, которая может меняться от версии к версии.
- Google Chrome:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36 - Mozilla Firefox:
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/115.0 - Safari:
Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.0 Safari/605.1.15 - Microsoft Edge:
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
Поисковые роботы
Поисковые системы (Google, Яндекс, Bing) используют специальные User-Agent для идентификации своих краулеров. Они обычно содержат название компании и слово «bot» или «crawler».
- Googlebot:
Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)` - YandexBot:
Mozilla/5.0 (compatible; YandexBot/3.0; +http://yandex.com/bots)` - Bingbot:
Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)`
Мобильные приложения и API-клиенты
Многие мобильные приложения и библиотеки для работы с HTTP (например, curl, wget, requests в Python) также отправляют User-Agent.
- curl:
curl/7.88.1 - Wget:
Wget/1.21.3 - Python-urllib:
Python-urllib/3.11 - **Мобильное приложение Instagram (продукт Meta, признанной экстремистской и запрещённой в РФ)**:
Instagram 123.0.0.0.0 (iPhone; iOS 16.0; en_US; en; scale=3.00; 1125x2436)
Применение
Адаптация контента
Серверы используют User-Agent для определения типа устройства (компьютер, планшет, смартфон) и операционной системы, чтобы отдавать соответствующий контент. Например, сайт может отображать мобильную версию для пользователя с iPhone и десктопную — для пользователя с Windows.
Статистика и аналитика
Веб-аналитика (например, Яндекс.Метрика, Google Analytics) собирает данные о User-Agent для составления отчётов о популярности браузеров, операционных систем и устройств среди посетителей сайта.
Безопасность и фильтрация
Некоторые системы безопасности (WAF — Web Application Firewall) используют User-Agent для блокировки подозрительных запросов, например, от известных инструментов для сканирования уязвимостей или от ботов, не соответствующих требованиям robots.txt. Также User-Agent может использоваться для ограничения доступа к определённым ресурсам (например, только для браузеров определённой версии).
Обход ограничений
Разработчики и пользователи могут изменять User-Agent (подменять его) в браузере или в HTTP-клиенте. Это делается для:
- Тестирования адаптивности сайта (эмуляция мобильного устройства на десктопе).
- Обхода блокировок по типу браузера (например, некоторые сайты могут блокировать старые версии Internet Explorer).
- Скачивания файлов, доступных только для определённых устройств (например, версия приложения для iPad).
Критика и проблемы
Раздувание и избыточность
Исторически сложилось, что строки User-Agent современных браузеров содержат множество устаревших и неинформативных токенов (например, Mozilla/5.0, like Gecko). Это усложняет их парсинг и анализ, а также увеличивает размер HTTP-запроса.
Ненадёжность идентификации
Поскольку User-Agent может быть легко подменён, полагаться на него как на единственный источник информации о клиенте ненадёжно. Многие боты и вредоносные программы маскируются под популярные браузеры, чтобы избежать блокировки.
Конфиденциальность
Строка User-Agent может раскрывать довольно точную информацию об устройстве и версии операционной системы, что потенциально может использоваться для отслеживания пользователей (fingerprinting). В ответ на это некоторые браузеры начали вводить механизмы ограничения или обобщения User-Agent (например, функция «User-Agent Client Hints» в Chrome).
Проблемы с устаревшими браузерами
Сайты, которые полагаются на User-Agent для определения возможностей браузера, могут отказывать в обслуживании пользователям с нестандартными или старыми User-Agent, даже если их браузер технически способен отобразить страницу корректно. Это привело к появлению практики «подделки» User-Agent для совместимости.
User-Agent Client Hints
В 2020-х годах компания Google предложила альтернативный механизм — User-Agent Client Hints (UA-CH). Этот API позволяет серверу запрашивать у браузера только те сведения, которые ему необходимы, а не получать всю строку User-Agent целиком. Это повышает конфиденциальность, так как пользователь или браузер может ограничить объём передаваемой информации. Однако внедрение этого стандарта происходит медленно, и многие серверы продолжают использовать традиционный User-Agent.
Источники
- RFC 7231 — Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content (2014)
- RFC 1945 — Hypertext Transfer Protocol — HTTP/1.0 (1996)
- Документация Mozilla Developer Network (MDN) — User-Agent
- Статья «User-Agent» в Википедии (английская версия)
- Материалы Google Developers — User-Agent Client Hints
- Отчёты аналитики StatCounter и W3Counter по доле браузеров
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →