Заголовок HTTP-запроса: переменная UserAgent
При отправке HTTP-запроса IE отправляет переменную User-Agent на сервер. Возможное значение (как видно от сетевого отладчика):
User-Agent: Mozilla/5.0 (совместимый MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Мой вопрос: как IE (или любой другой браузер) узнает эту переменную?
Я спрашиваю об этом, потому что, посещая некоторые веб-сайты, эта переменная отличается от других, и я хотел бы проследить, откуда это происходит. "Параметры совместимости" - это один из вариантов, но я думаю, что есть еще что-то.
Может ли кто-нибудь объяснить процесс этой переменной?
Ответы
Ответ 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