关于http标题:chrome表示Mozilla / 5.0(Macintosh; Intel Mac OS X 10_10_5)AppleWebKit / 537.36(KHTML,类似Gecko)Chrome / 54.0.2840.71 Safari / 537.36

chrome says Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36

我正在尝试识别并研究什么用户代理正在向我们的应用程序发送请求。

当我用chrome执行请求时,我看到它说

"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/54.0.2840.71 Safari/537.36"

当我从Safari执行它时,它说

Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/602.1.50 (KHTML, like Gecko) Version/10.0 Safari/602.1.50

当你从Mozilla执行它时,它会说

Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:49.0) Gecko/20100101 Firefox/49.0

为什么对所有的请求都说"Mozilla/5.0",而对于Chrome,它特别列出了所有的Mozilla、Chrome和Safari。

有人能解释一下为什么会这样吗?谢谢。


用户代理字符串是一团乱麻,很难编写代码从中获得准确的信息。(有关原因的详细历史记录,请参阅此链接)。

如果您只想收集统计数据,可以尝试在前端添加Google分析,或者使用一个专门分析后端用户代理字符串的库,例如MobileDetect for PHP。

如果要根据浏览器支持的功能执行不同的操作,请尝试检测对该功能的支持,而不是浏览器版本。现代化对这一点很有帮助。