В вычислительной технике заголовок User -Agent — это HTTP- заголовок, предназначенный для идентификации пользовательского агента, ответственного за выполнение данного HTTP-запроса. В то время как последовательность символов User-Agent
включает в себя имя самого заголовка, значение заголовка, которое данный пользовательский агент использует для идентификации себя, в разговорной речи известно как строка пользовательского агента . Пользовательский агент для оператора компьютера, используемого для доступа к Интернету, закодировал в правилах, которые управляют его поведением, знание того, как согласовывать свою половину транзакции запрос-ответ; таким образом, пользовательский агент играет роль клиента в системе клиент-сервер . Часто полезной в сетях считается способность идентифицировать и различать программное обеспечение, облегчающее сетевой сеанс. По этой причине HTTP-заголовок User-Agent существует для идентификации клиентского программного обеспечения для отвечающего сервера.
Когда программный агент работает в сетевом протоколе, он часто идентифицирует себя, свой тип приложения, операционную систему , модель устройства, поставщика программного обеспечения или версию программного обеспечения, отправляя характерную строку идентификации своему рабочему партнеру. В протоколах HTTP, [1] SIP, [2] и NNTP [3] эта идентификация передается в поле заголовка User-Agent . Боты , такие как веб-сканеры, часто также включают URL и/или адрес электронной почты , чтобы веб-мастер мог связаться с оператором бота.
В HTTP «строка агента пользователя» часто используется для согласования контента , где исходный сервер выбирает подходящий контент или рабочие параметры для ответа. Например, строка агента пользователя может использоваться веб-сервером для выбора вариантов на основе известных возможностей конкретной версии клиентского программного обеспечения. Концепция адаптации контента встроена в стандарт HTTP в RFC 1945 «для адаптации ответов с целью избежания ограничений конкретного агента пользователя».
Строка агента пользователя является одним из критериев, по которым веб-сканерам может быть запрещен доступ к определенным частям веб-сайта с помощью стандарта исключения роботов ( файл robots.txt ).
Как и во многих других заголовках HTTP-запросов, информация в строке пользовательского агента влияет на информацию, которую клиент отправляет на сервер, поскольку строка может значительно различаться у разных пользователей. [4]
Формат строки агента пользователя в настоящее время определен в разделе 10.1.5 HTTP Semantics. Формат строки агента пользователя в HTTP представляет собой список токенов продукта (ключевых слов) с необязательными комментариями. Например, если продукт пользователя называется WikiBrowser, его строка агента пользователя может быть WikiBrowser/1.0 Gecko/1.0 . «Самый важный» компонент продукта указан первым.
Части этой строки следующие:
Во время первой войны браузеров многие веб-серверы были настроены на отправку веб-страниц, требующих расширенных функций, включая фреймы , клиентам, которые были идентифицированы как некая версия Mozilla . [5] Другие браузеры считались устаревшими продуктами, такими как Mosaic , Cello или Samba , и им отправлялся простой HTML-документ.
По этой причине большинство веб-браузеров используют строковое значение пользовательского агента следующим образом:
Например, Safari на iPad использует следующее:
Mozilla/5.0 (iPad; U; ОС CPU 3_2_1, например Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, например Gecko) Mobile/7B405
Компоненты этой строки следующие:
До перехода на кодовую базу Chromium Opera была наиболее широко используемым веб-браузером, не имевшим строки пользовательского агента с «Mozilla» (вместо этого она начиналась с «Opera»). С 15 июля 2013 года [6] строка пользовательского агента Opera начинается с «Mozilla/5.0» и, чтобы избежать столкновения с устаревшими правилами сервера, больше не включает слово «Opera» (вместо этого используется строка «OPR» для обозначения версии Opera).
Автоматизированные инструменты веб-сканирования могут использовать упрощенную форму, где важным полем является контактная информация в случае возникновения проблем. По соглашению слово «бот» включено в имя агента. Например:
Googlebot/2.1 (+http://www.google.com/bot.html)
Автоматизированные агенты должны следовать правилам, изложенным в специальном файле под названием « robots.txt ».
Веб-браузеры, созданные в Соединенных Штатах, такие как Netscape Navigator и Internet Explorer , ранее использовали буквы U, I и N для указания стойкости шифрования в строке пользовательского агента. До 1996 года, когда правительство Соединенных Штатов разрешило экспортировать шифрование с ключами длиннее 40 бит, поставщики поставляли различные версии браузеров с различной стойкостью шифрования. «U» означает «США» (для версии со 128-битным шифрованием), «I» означает «Международный» — браузер имеет 40-битное шифрование и может использоваться в любой точке мира, а «N» означает ( де-факто ) «Нет» (без шифрования). [7] После снятия экспортных ограничений большинство поставщиков поддерживали 256-битное шифрование.
Популярность различных продуктов веб-браузеров менялась на протяжении всей истории Интернета, и это повлияло на дизайн веб-сайтов таким образом, что веб-сайты иногда проектируются для хорошей работы только с определенными браузерами, а не в соответствии с едиными стандартами Консорциума Всемирной паутины (W3C) или Целевой группы по инжинирингу Интернета (IETF). Веб-сайты часто включают код для определения версии браузера, чтобы скорректировать дизайн страницы, отправленной в соответствии с полученной строкой пользовательского агента. Это может означать, что менее популярные браузеры не отправляют сложный контент (хотя они могут правильно с ним справиться) или, в крайних случаях, отклоняют весь контент. [8] Таким образом, различные браузеры имеют функцию скрытия или подделки своей идентификации, чтобы принудительно отображать определенный контент на стороне сервера. Например, браузер Android идентифицирует себя как Safari (помимо прочего) для обеспечения совместимости. [9] [10]
Другие клиентские программы HTTP, такие как менеджеры загрузок и автономные браузеры , часто имеют возможность изменять строку пользовательского агента.
Результатом подмены пользовательского агента может стать неточность собранной статистики использования веб-браузера .
Сниффинг пользовательских агентов — это практика показа веб-сайтами различного или измененного контента при просмотре с помощью определенных пользовательских агентов. Примером этого является функция Outlook Web Access Microsoft Exchange Server 2003. При просмотре с помощью Internet Explorer 6 или более поздней версии отображается больше функциональности по сравнению с той же страницей в любых других браузерах. Сниффинг пользовательских агентов считается плохой практикой, поскольку он поощряет разработку, специфичную для браузера, и наказывает новые браузеры с нераспознанными идентификаторами пользовательских агентов. Вместо этого W3C рекомендует создавать стандартную HTML-разметку, [11] позволяющую корректную визуализацию в максимально возможном количестве браузеров, и тестировать определенные функции браузера, а не конкретные версии браузеров или бренды. [12]
Веб-сайты, предназначенные для просмотра на мобильных телефонах, часто используют анализ пользовательских агентов, поскольку мобильные браузеры часто сильно отличаются друг от друга.
В 2020 году Google объявила, что заморозит части заголовка User-Agent в своем браузере Chrome , поскольку он больше не используется для определения возможностей браузера, а вместо этого в основном используется для пассивного снятия отпечатков браузера . [13] Google заявила, что новая функция под названием Client Hints заменит функциональность строки user-agent. [14]
Начиная с Chrome 113, выпущенного в апреле 2023 года, заголовок User-Agent был частично заморожен. User-Agent в новой версии Chrome останется статичным, за исключением цифр, которые представляют основную версию используемого браузера. [15]
Начиная с Firefox 110, выпущенного в феврале 2023 года, [16] Mozilla объявила, что временно заморозит части строки пользовательского агента браузера на версии 109. Это было сделано из-за того, что несколько веб-сайтов неправильно распознали разрабатываемую версию браузера (которая идентифицировала себя строкой ) [17] как устаревший Internet Explorer 11 (который сообщает ). [18] Проблема будет исправлена автоматически после выпуска Firefox 120, поскольку было замечено, что она затрагивает только браузеры, идентифицирующие себя как 110–119. [19]Mozilla/5.0 (Windows NT 10.0; Win64; rv:110.0) Gecko/20100101 Firefox/110.0
Mozilla/5.0 (Windows NT 10.0; Trident/7.0; rv:11.0) like Gecko
/5.0 (Linux; U; Android 2.2; en-sa; HTC_DesireHD_A9191 Build/FRF91) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1