Подтвердить что ты не робот

Заголовок HTTP-запроса: переменная UserAgent

При отправке HTTP-запроса IE отправляет переменную User-Agent на сервер. Возможное значение (как видно от сетевого отладчика):

User-Agent: Mozilla/5.0 (совместимый MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Мой вопрос: как IE (или любой другой браузер) узнает эту переменную? Я спрашиваю об этом, потому что, посещая некоторые веб-сайты, эта переменная отличается от других, и я хотел бы проследить, откуда это происходит. "Параметры совместимости" - это один из вариантов, но я думаю, что есть еще что-то.

Может ли кто-нибудь объяснить процесс этой переменной?

4b9b3361

Ответ 1

Пользователь-агент отображается в заголовке HTTP-запроса, а не в HTTP-ответе. В общем случае запрос отправляется из браузера в веб-приложение. Таким образом, переменная user-agent заполняется браузером. Различные браузеры будут заполнять это поле разными значениями.

О том, как IE находит эти переменные, я думаю, вы спрашиваете Ключи реестра User-Agent.

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

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER)
   SOFTWARE
      Microsoft
         Windows
            CurrentVersion
               Internet Settings
                  5.0
                     User Agent
                        (default) = "Mozilla/4.0"
                        Compatible = "compatible"
                        Platform = "Windows NT 5.1"
                        Version = "MSIE 6.0"
                        Pre Platform
                           Token = Value
                        Post Platform
                           Token = Value

Значение по умолчанию для ключа User Agent заменяет токены имени приложения и версии приложения, указанные в строке user-agent. Имейте в виду, что первые семь символов используются для имени приложения, а остальные символы указывают токен версии приложения.

Значения Compatible, Platform и Version заменяют соответствующие токены в строке user-agent.

Дополнительные токены могут быть добавлены в строку user-agent с помощью редактора реестра для создания новых строковых значений под ключом Pre-Platform или Post-Platform. Имя значения должно быть полным токеном; данные значения игнорируются. Токены, добавленные в ключ Pre-Platform, отображаются перед маркером платформы в конечной строке пользовательского агента. Токены, добавленные в ключ Post-Platform, появляются после маркера платформы в конечной строке пользовательского агента. Несколько маркеров в ключе Pre-Platform или Post-Platform отображаются в непредсказуемом порядке.

Ответ 2

Статья Википедии об User Agent заявляет, что:

Формат строки User-Agent в настоящее время определяется разделом 14.43 RFC 2616 (HTTP/1.1) Формат строки User-Agent в HTTP список токенов продукта (ключевые слова) с необязательными комментариями.

Поэтому я рекомендую вам прочитать раздел RFC 2616:

14.43 User-Agent

Поле заголовка запроса-пользователя User-Agent содержит информацию о пользовательский агент, отправляющий запрос. Это делается для статистических целей, отслеживание нарушений протокола и автоматическое распознавание пользователя агентов для адаптации ответов, чтобы избежать конкретного пользователя
ограничений агента. Пользовательские агенты ДОЛЖНЫ включать это поле с помощью Запросы. Поле может содержать несколько токенов продукта (раздел 3.8) и комментарии, идентифицирующие агента и любые субпродукты, которые образуют значительная часть пользовательского агента. По соглашению, токены продукта перечислены в порядке их значимости для идентификации приложение.

   User-Agent     = "User-Agent" ":" 1*( product | comment )

Пример:

   User-Agent: CERN-LineMode/2.15 libwww/2.17b3

В разделе 4.8 о токенах продуктов указано следующее:

3.8 Токены продукта

Товарные жетоны используются, чтобы разрешать передачу приложений на
идентифицировать себя по имени и версии программного обеспечения. Большинство полей, использующих токены продукта также позволяют использовать субпродукты, которые составляют значительную часть
приложения, которое будет указано в списке, разделенное пробелом. По
конвенции, продукты перечислены в порядке их значимости
для идентификации приложения.

   product         = token ["/" product-version]
   product-version = token

Примеры:

   User-Agent: CERN-LineMode/2.15 libwww/2.17b3
   Server: Apache/0.8.4

Товарные жетоны ДОЛЖНЫ быть короткими и точными. Они НЕ ДОЛЖНЫ быть используется для рекламы или другой несущественной информации. Хотя любой символ токена МОЖЕТ отображаться в версии продукта, этот токен ДОЛЖЕН
используется только для идентификатора версии (т.е. последовательных версий тот же продукт ДОЛЖЕН отличаться только частью продукта-версии значение продукта).

Таким образом, согласно RFC 2616, содержимое агентов пользователя зависит от браузера. Например, вот как Mozilla Firefox создает свой пользовательский агент: https://developer.mozilla.org/en-US/docs/Gecko_user_agent_string_reference