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

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

Пользователь-агент: Mozilla /5.0 (совместимо с MSIE 9.0;Windows NT 6.1;WOW64; Trident/5.0)

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

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

2 ответа

Решение

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

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

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

В статье Википедии об агенте пользователя говорится, что:

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

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

14.43 Пользователь-агент

Поле заголовка запроса 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

Другие вопросы по тегам