【问题标题】:internet explorer User-Agent header differs in HTTP call versus navigator.userAgentInternet Explorer User-Agent 标头在 HTTP 调用与 navigator.userAgent 中不同
【发布时间】:2014-07-28 16:01:00
【问题描述】:

我需要获取 AngularJS 用来发送 HTTP 请求的 User-Agent 标头。当我使用 Internet Explorer 时,在 Fiddler 中我看到请求中发送的用户代理等于:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko

但是,当我使用navigator.userAgent 获取用户代理时,它会返回:

Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko

我在 HTML <head> 中添加了 <meta http-equiv="X-UA-Compatible" content="IE=edge" /> 标记,希望能解决问题,但事实并非如此。我还尝试过启用和禁用 Intranet(在本例中为本地主机)站点的兼容性视图。

背景:用户代理正在通过查询字符串(连同查询字符串中的身份验证令牌)传递给 Windows 单击一次应用程序。 Windows 应用程序需要使用与 AngularJS 应用程序相同的身份验证令牌和用户代理,否则如果用户代理不同,HTTP API 调用会导致 401。 Windows 应用不应要求用户登录,并且应使用与浏览器用户相同的身份验证上下文。

如何获取我在 Fiddler 中观察到的实际发送的 User-Agent?

【问题讨论】:

  • 嗨@kindohm,我们的系统也遇到了同样的问题...您找到适合您的解决方案了吗?感谢您与我们分享...谢谢!

标签: javascript angularjs internet-explorer http-headers user-agent


【解决方案1】:

据我所知,Internet Explorer 版本 9 及更高版本中的用户代理字符串,在 HTTP 请求中发送的版本和通过 navigator.userAgent 获得的版本之间几乎永远不同,因为在字符串(只是偶然在全新安装时它们可能会在短时间内相同)。这里解释一下背景:http://msdn.microsoft.com/en-us/library/ms537503%28v=vs.85%29.aspx

来自 msdn 文档:

早期版本的 Internet Explorer 包括使用 Pre-Platform 和 HTTP 协商过程中用户代理字符串的后平台密钥部分。随着时间的推移, 这会导致用户代理字符串过长,进而给某些 Web 服务器带来问题。 当用户代理字符串超过 256 个字符时,通常会出现问题。截至互联网 Explorer 9,用户代理字符串在 HTTP 协商期间不再包含功能令牌。特征 标记包含在导航器对象的 userAgent 属性返回的值中。 应该相应地修改依赖于早期行为的应用程序。

使用<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE8" /> 元标记设置兼容性视图模式也不会影响用户代理问题(我已经在 MSIE 10 和 MSIE 11 中测试过)。

我能想象的唯一部分解决方案(这不可靠)是从通过 java 脚本获得的字符串中去除已知的特征属性,然后尝试比较字符串。

很遗憾,我怀疑您应该尝试为您的问题找到不涉及用户代理字符串比较的其他解决方案。

【讨论】:

  • 谢谢。我们正在考虑可以避免此检查的替代方案。
猜你喜欢
  • 2014-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
相关资源
最近更新 更多