地点 | 已报告 UA |
---|---|
https://duckduckgo.com/?q=what+is+my+user+agent&ia=answer | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.81 Safari/537.36 Vivaldi/5.2.2623.26 |
https://www.whatismybrowser.com/detect/what-is-my-user-agent/ | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.81 Safari/537.36 |
https://httpbin.org/get | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/100.0.4896.81 Safari/537.36 |
分析
只有 DuckDuckGo 自己的机制可以检测到我实际上正在运行 Vivaldi,因为它具有Vivaldi/5.2.2623.26
其他两个所缺少的部分。
怎么会这样?这真是让我困惑不已。
答案1
因为浏览器发送向这些网站发送不同的 User-Agent 字符串。实际上并没有进行任何检测 - 网站只是从 HTTP 请求标头中获取 User-Agent 字段作为字符串并将其显示给您,因此,没有什么可以阻止浏览器在需要时在每个请求中发送不同的字符串。(您可以使用扩展程序让浏览器User-Agent: Cake/3.1416
以 HTTP 标头的形式发送,然后所有网站都会报告它。)
问题是有些网站关心太多了关于用户代理,例如他们可能会避免使用 Vivaldi 中的某些功能,理由是它“不是 Chrome”(尽管它具有这些功能甚至使用相同的渲染引擎),这导致许多浏览器将其用户代理欺骗为网站可以识别的值,即使它并不完全正确。
以下文章解释了为什么 Vivaldi 决定假装成 Chrome:
- https://vivaldi.com/blog/user-agent-changes/
- https://www.zdnet.com/article/vivaldi-to-change-user-agent-string-to-chrome-due-to-unfair-blocking/
最初的 Opera(在 Presto 引擎时代)已经有一个子菜单,用于在几个流行的用户代理字符串之间切换(如果我没记错的话,默认情况下假装是 Mozilla)。甚至 Firefox 也必须偶尔修改其 UA 字符串,例如这里或者这里。