地点 | 报告的 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
其他两个缺少的部分。
怎么会这样?这真的让我大吃一惊。
因为浏览器向这些网站发送不同的 User-Agent 字符串。没有进行真正的检测——网站实际上只是从 HTTP 请求标头中获取 User-Agent 字段作为字符串并将其显示给您,因此没有什么可以阻止浏览器在需要时在每个请求中发送不同的字符串. (您可以使用扩展程序使浏览器
User-Agent: Cake/3.1416
作为 HTTP 标头发送,所有网站都会将其报告回来。)问题是一些网站过于关心用户代理,例如,他们可能会因为“不是 Chrome”而避免使用 Vivaldi 中的某些功能(尽管它具有这些功能,甚至使用相同的渲染引擎),这导致许多浏览器将其 User-Agent 欺骗为网站可以识别的值,即使它并不完全正确。
这是关于为什么 Vivaldi 特别决定假装 Chrome 的帖子:
最初的 Opera(早在 Presto 引擎时代)已经有一个子菜单,用于在几个流行的用户代理字符串之间切换(如果我没记错的话,默认情况下伪装成 Mozilla)。甚至 Firefox 也必须在某些情况下修改其 UA 字符串,例如此处或此处。