【问题标题】:What does it mean when IE reports two versions in UserAgent?IE在UserAgent中报告两个版本是什么意思?
【发布时间】:2015-04-09 01:12:21
【问题描述】:

我看到 IE 用户代理字符串有多个部分报告为不同版本的情况。例如:

   Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; 
   {B93AEBFF-7B72-44EA-B006-8CB078CC1911}; 
   Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; 
   .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; 
   .NET CLR 3.5.30729)

所以这声称是 MSIE 8.0,但也是 MSIE 6.0。这意味着什么特别的吗?它是股票 IE 还是有什么特别之处?

我之所以这么问,是因为我看到报告多个版本的浏览器出现了奇怪的行为,而另一个声称只有一个版本的 IE8.0 却没有:

Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; 
Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; 
.NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C)

不确定用户代理是否与它有关,但我想我会问。

[更新] 请注意,我没有针对特定浏览器版本进行编码,我只是注意到这是行为异常的浏览器与正常浏览器之间的差异。我想知道什么会导致一些 IE8.0 报告他们也是 IE6.0 其他人不是。

【问题讨论】:

  • 您是否尝试过自己访问网站,在“兼容模式”下运行 IE8?我怀疑这是双标头的原因。
  • “奇怪的行为”是什么意思,你是如何验证你的用户代理的? user-agents.org/index.shtml?moz 没有列出这个特定的用户代理,它看起来确实无效。但是,用户代理可以在首选项中或通过注册表覆盖(请参阅msdn.microsoft.com/en-us/library/ms537503(VS.85).aspx)。您的用户代理中的“{B93AEBFF-7B72-44EA-B006-8CB078CC1911}”让我觉得您的机器有些问题。
  • 通过supportdetails.com 和另一个我不记得的站点获取用户代理。这是来自客户端浏览器(不是我们的),所以我不能确定,但​​我严重怀疑用户弄乱了注册表。这是我见过的第二个有多个 IE 版本(另一个是 MSIE7.0,也包括 MSIE6.0)。奇怪的行为:在这种情况下,它是一个 jquery .change 事件,没有按预期触发(当用户在下拉列表中选择新的东西时)。兼容模式:好点,当我可以访问Windows框时会尝试它。不过也发生在 IE7 上。

标签: internet-explorer


【解决方案1】:

Lou 的回答是正确的,但我会继续展开。

用户代理字符串可用于网页上运行的 JavaScript 代码。不幸的是,在 Web 开发人员中,检查用户代理字符串以执行特定于浏览器的增强或变通方法是相当普遍(也是不好)的做法。

当具有升级功能的新浏览器推出时,他们的开发人员意识到许多网站无法在它们中运行或以降级的方式运行,因为用户代理检查不正确并且在代码中采用了错误的路径。这导致浏览器开发人员修改他们的用户代理字符串,以便采用正确的路径。这导致了目前的情况,每个浏览器都伪装成 Mozilla,而用户代理字符串通常是一团糟。

因此,您看到行为不端的网站很可能正在执行用户代理检查,但没有正确执行。正如 Lou 所说,JavaScript 代码不应该尝试解析用户代理(这是一种非常脆弱的测试浏览器的方法,很可能会与未来版本的浏览器中断),而是检查浏览器的功能。当前流行的 JavaScript 库(如 jQuery)以正确的方式做到了这一点(使用它们的另一个原因),但仍然会发生自定义编写的 JavaScript 代码会尝试使用用户代理字符串。

【讨论】:

  • 我认为你和 Lou 可能误解了他的意思。他不是在谈论 Mozilla 4.0,然后是 IE。他从一个连接中获得了两个完全独立的用户代理,就好像有人一个接一个地粘贴一样。这很不正常。
  • 尤其是“{B93AEBFF-7B72-44EA-B006-8CB078CC1911}”部分。
【解决方案2】:

6.0 版本实际上在 8.0 版本的括号内。 (当然,根据 HTTP 语法,两者都不是真正有效的,但现在几乎没有人将其视为结构化字符串。)

此帖子似乎是 B93AEBFF-7B72-44EA-B006-8CB078CC1911 的唯一结果,这是可疑的。

【讨论】:

  • 哦,哇,在你指出之前(关于它在括号中),我真的认为这是两个独立的用户代理。所以看起来它真的只是一个;我认为其他人也没有意识到这一点。
【解决方案3】:

人们开始针对版本进行编码,然后所有未来的用户代理字符串都需要将该版本保留在他们的字符串中,否则事情将停止工作。

从不编码到用户代理字符串,编码到功能:

http://kangax.github.io/cft/

【讨论】:

  • 永远不要发布纯链接,它们不是不朽的:)
  • @dit 我更新了链接——随意抓住你认为重要的内容并更新答案
  • 最好先存档archive.isarchive.org 之类的链接,然后发布 链接,可能与原始链接一起发布。但我认为 +dit 的意思是您应该将链接中的一些(相关)信息放入您的帖子中。
猜你喜欢
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-11-08
  • 2019-09-17
  • 2014-09-10
  • 2013-07-19
相关资源
最近更新 更多