Заголовок 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