我刚刚注意到,虽然所有其他浏览器似乎都有自己的用户代理字符串,但 Microsoft Edge 似乎看起来像这样:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393
为什么它有 Mozilla、Chrome 和 Safari,而不只是 Edge?
答案1
那么为什么它有 Mozilla、Chrome 和 Safari,而不只是 Edge?
网页设计师很懒,他们试图阻止访问者使用特定的浏览器,因为他们想使用仅被某些浏览器支持的更简单的框架。
限制用户代理检查的实用性也是经过深思熟虑的设计决定。这一决定可能基于以下事实(从 Spartan/Edge 开发人员的角度来看),即过去网站会专门查找 IE 并通知用户使用其他浏览器。
由于 Edge/Spartan 是微软首次尝试现代化 Trident 引擎,并且 Edge/Spartan 的目的是匹配当时 (Blink、AppleWebKit 和 Gecko) 的功能集,因此用户代理简单地将自己宣传为无所不能,这是防止网页设计人员轻易以针对 IE 的方式针对 Edge 的一种方法。
尽管 Internet Explorer 11 支持许多新的 Web 标准,但您今天访问的许多网站在 IE 中无法正常显示,因为它们的编码不正确,并且通常显示与旧浏览器中相同的页面。某些页面在 IE 中显示不正确,但在 Chrome 或 Firefox 等其他浏览器上却可以正常运行。
即使您关闭平滑滚动,某些网站仍存在滚动不顺畅的问题,并且有时由于网页将您的浏览器识别为 IE,因此重要元素将不会显示。
Chrome 和 Firefox 也做了类似的事情:
Mozilla/5.0 (Windows NT XY; WOW64) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/50.0.2657.0 Safari/537.36,gzip(gfe),gzip(gfe)”
值得指出的是,IE11 的用户代理类似:
Mozilla/5.0 (Windows NT 10.0;WOW64;Trident/7.0;rv:11.0) 与 Gecko 类似
答案2
Edge 冒充 Chrome,Chrome 冒充 Safari,Safari 冒充 Mozilla。Edge 使用 EdgeHTML 但没有展示它,Chrome 使用 Blink 但没有展示它,而 Chrome 冒充 WebKit。Webkit 冒充 KHTML,KHTML 冒充 Gecko。网络界面上充斥着大量混乱。
取自Microsoft Edge 的用户代理字符串名称是什么?评论者克劳德
Microsoft Edge UA 字符串:
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136
Neowin 最近报道称,微软针对 Windows 10 的新浏览器 Spartan 使用 Chrome UA 字符串,“Mozilla/5.0(Windows NT 10.0;WOW64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/39.0.2171.71 Safari/537.36 Edge/12.0”。 这是故意的。
您还会注意到整个字符串以“Edge/12.0”结尾,而 Chrome 却不是这样。
我应该指出,这与微软对 IE 11 的做法并没有太大区别,Windows 8 上的 IE 11 内容为:Mozilla/5.0(Windows NT 6.3;Trident/7.0;rv:11.0)类似 Gecko,正如这篇文章所解释的那样。
什么是用户代理嗅探?
通常,Web 开发人员会使用 UA 嗅探来检测浏览器。Mozilla 在他们的博客上对此进行了很好的解释:
为不同的浏览器提供不同的网页或服务通常不是一个好主意。网络旨在让每个人都能访问,无论他们使用哪种浏览器或设备。有多种方法可以开发您的网站,使其根据功能的可用性逐步增强,而不是针对特定的浏览器。
通常,懒惰的开发人员只会嗅探 UA 字符串,并根据他们认为查看者正在使用的浏览器禁用其网站上的内容。Internet Explorer 8 是开发人员常见的挫败点,因此他们会频繁检查用户是否正在使用任何版本的 IE,并禁用功能。
所有用户代理字符串都包含比您实际使用的浏览器更多的有关其他浏览器的信息 - 不仅仅是令牌,还有“有意义的”版本号。
Internet Explorer 11 的 UA 字符串:
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) 类似 Gecko
Microsoft Edge UA 字符串:
Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML,如 Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10136
在 W3C 讨论中,Patrick H. Lauke 恰当地将 userAgent 属性描述为“一堆不断增加的谎言”。(“或者更确切地说,这是一种平衡行为,即添加足够多的旧关键字,这些关键字不会立即导致旧的 UA 嗅探代码失效,同时仍试图传达一些真正有用且准确的信息。”)
我们建议 Web 开发人员尽可能避免 UA 嗅探;现代 Web 平台功能几乎都可以通过简单的方式检测到。例如,现代化库是一种检测特征的奇妙而简单的方法。
在过去的一年中,我们发现一些 UA 嗅探网站已更新以检测 Microsoft Edge……但只为其提供了旧版 IE11 代码路径。这不是最好的方法,因为 Microsoft Edge 匹配的是“WebKit”行为,而不是 IE11 行为(任何 Edge-WebKit 差异都是我们想要修复的错误)。
根据我们的经验,Microsoft Edge 在这些网站中最适合在“WebKit”代码路径上运行。此外,随着互联网在各种设备上的普及,请假设未知浏览器是好的 - 请不要将您的网站限制在一小部分当前已知的浏览器上运行。如果您这样做,您的网站将来几乎肯定会崩溃。
结论
通过提供 Chrome UA 字符串,我们可以解决这些开发人员正在使用的黑客攻击,从而为用户提供最佳体验。