【发布时间】:2016-02-23 08:31:03
【问题描述】:
谁能从下面的用户代理告诉我客户端使用的是什么浏览器?如果可以的话,你能告诉我你是怎么想出来的吗?我正在尝试从 .Net 中识别客户端浏览器,但似乎没有防弹的方法。我认为下面的代码应该足以获取客户端浏览器名称,但 .Net 团队的回答指出该方法无法保证。
用户代理: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
C#
var req = HttpContext.Current.Request;
var browserName = req.Browser.Browser;
.Net 团队回答
感谢您的反馈。 BrowserCap 是一项遗留功能,我们没有 继续更新它,除非我们发现 asp.net 功能是 破碎由此造成。如果您真的希望您的应用能够识别 Edge 作为 Edge(不是 chrome),那么您可以添加自己的浏览器文件以匹配 app_browsers 文件夹下 Edge 的 UA 字符串。 Feedback
更新:* 以下是来自三个浏览器的 UA 字符串,它们可能表明最后一条信息可能是指标,但不适用于 Chrome。如您所见,chrome 在 UA 末尾显示 Safari/537.36,因此这不能作为指标。而且,系统上没有安装 safari,为什么 google 和 Microsoft 试图愚弄我们呢?我想问他们这个问题;如果信息是用来欺骗我们的,那么用户代理的目的是什么。让我们将其完全从标头中取出(通过互联网传输的字节更少)。如果这是standards,请尊重他们或完全摆脱他们。如果我因缺乏信息而做出错误的假设,请纠正我。
边缘: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Edge/12.10240
火狐: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:42.0) Gecko/20100101 Firefox/42.0
铬: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36
【问题讨论】:
-
另外 3 个用户代理(全部来自 OS X):Firefox:Mozilla/5.0(Macintosh;Intel Mac OS X 10.9;rv:42.0)Gecko/20100101 Firefox/42.0 Chrome: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2557.0 Safari/537.36 Safari: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/601.2.7 (KHTML, like Gecko) Version/9.0.1 Safari/537.86.2
-
嗯,很有趣,但 Google 和 MS 似乎有 Safari/537.36 在我和你的示例中使用不同操作系统的 UA。这一定是愚蠢的部分:-D;到目前为止,最诚实的浏览器似乎是 Firefox 和 Safari。谷歌不公平,微软试图复制谷歌:(
-
我认为微软是第一个复制的:quora.com/…