HTTP_USER_AGENT и navigator.userAgent не одно и то же, понимаете? - PullRequest
4 голосов
/ 02 февраля 2012

Я использую Javascript в клиенте, получаю navigator.userAgent, возвращает:

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; HPNTDF; .NET4.0C; .NET4.0E)

использовать C # Request.ServerVariables["HTTP_USER_AGENT"], возвращает:

Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)

Как видите, его IE: (.

IE всегда так делает, или только я? Как получить такое же значение?

PS , я пробовал это даже в локальном IIS, те же результаты

1 Ответ

1 голос
/ 26 августа 2015

Строка пользовательского агента в Internet Explorer 9 и выше почти всегда будет отличаться, между версией, отправленной в HTTP-запросе, и версией, полученной через navigator.userAgent. Это из-за так называемых функциональных токенов в строке. Фон для этого объясняется здесь: http://msdn.microsoft.com/en-us/library/ms537503%28v=vs.85%29.aspx

Из MSDN-документа:

Более ранние версии Internet Explorer включали токены функций, определенные с использованием ключей Pre-Platform и Post-Platform в строке user-agent во время процесса HTTP-согласования. Со временем это приводит к чрезмерно длинным строкам пользовательских агентов, что, в свою очередь, создает проблемы для определенных веб-серверов. Проблемы обычно возникали, когда строки агента пользователя были длиннее 256 символов. Начиная с Internet Explorer 9, строка user-agent больше не включает маркеры функций во время HTTP-согласования. Маркеры объектов включаются в значение, возвращаемое свойством userAgent объекта навигатора. Приложения, использующие предыдущее поведение, должны быть соответствующим образом изменены.

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

...