Открыть сервис

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

Разбор на примере

  1. Mozilla/5.0 — исторический префикс, унаследованный от браузера Netscape. Практически все современные браузеры начинаются с этой строки для совместимости с серверами, которые отказывали в обслуживании не-Mozilla-клиентам.
  2. Windows NT 10.0; Win64; x64операционная система (Windows 10, 64-разрядная версия).
  3. AppleWebKit/537.36 — имя и версия движка рендеринга (WebKit), используемого браузером.
  4. KHTML, like Gecko — устаревшие идентификаторы, указывающие на совместимость с движками KHTML и Gecko (для обхода серверных фильтров).
  5. Chrome/120.0.0.0 — собственно браузер и его версия.
  6. Safari/537.36 — дополнительный идентификатор, указывающий на совместимость с Safari (также для обхода фильтров).

Классификация User-Agent

User-Agent можно классифицировать по типу клиента, который его отправляет:

Браузеры

Наиболее распространённая категория. Каждый браузер имеет свою уникальную строку, которая может меняться от версии к версии.

Поисковые роботы

Поисковые системы (Google, Яндекс, Bing) используют специальные User-Agent для идентификации своих краулеров. Они обычно содержат название компании и слово «bot» или «crawler».

Мобильные приложения и 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 →