为什么不同的网站将 Vivaldi 的用户代理报告为不同的字符串?

为什么不同的网站将 Vivaldi 的用户代理报告为不同的字符串?
地点 已报告 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:

最初的 Opera(在 Presto 引擎时代)已经有一个子菜单,用于在几个流行的用户代理字符串之间切换(如果我没记错的话,默认情况下假装是 Mozilla)。甚至 Firefox 也必须偶尔修改其 UA 字符串,例如这里或者这里

相关内容