toolfree

我在用什么浏览器

显示你的浏览器、排版引擎、作业系统与 User-Agent 字串,以及浏览器实际支援哪些功能。说明为何字串只是猜测、功能侦测才不是。

在你的浏览器中运行

浏览器
排版引擎
操作系统
语言
时区
CPU 核心数
设备内存
网络连接
Cookie 已启用
Do Not Track

上面的浏览器与系统是从 User-Agent 字符串读出来的,而每一种浏览器都刻意在这个字符串里造假。请当成一个还不错的猜测。

User-Agent 字符串
功能支持

上半部是猜的

上面的浏览器、引擎与系统,都是从你的 User-Agent 字串读出来的,而那个字串不是事实陈述。 每一种浏览器都刻意宣称自己是好几种别的浏览器,理由是三十年前的相容性问题。

Mac 上的 Chrome 会说:

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

这是一个浏览器同时宣称自己是 Mozilla、AppleWebKit、KHTML、Gecko 与 Safari,而它一个都不是。 这个惯例始于当年网站会先检查是不是 Netscape 才提供框架,于是后来每一个浏览器都把前一个的名字 加进去以免被挡掉,之后就再也停不下来了。

要解析它,就得依正确的顺序去测那些冒名者——Edge 要排在 Chrome 前面,Chrome 要排在 Safari 前面 ——并且接受一件事:新出现的浏览器会被误判成它模仿的那一个。

字串讲不出来的事

iPad 会说自己是 Mac。 自 iPadOS 13 起,它的字串和 macOS 上的 Safari 完全相同。唯一剩下的 线索是有没有触控支援,这就是本页把两者并列的原因。

iOS 上的每个浏览器都是 Safari 的引擎。 iPhone 上的 Chrome、Firefox 与 Edge 都必须使用 WebKit,差别只在字串里的品牌名。看到 CriOS,那是 Chrome 的接口套在 Safari 的引擎上。

版本号正在被冻结。 Chrome 与 Edge 已经缩减回报内容:次要版本号被归零,平台信息被泛化。 这是为了降低指纹辨识,也代表这个字串正在刻意变得更没有信息量。

功能支援才是答案

下方那份清单是浏览器实际做得到什么,直接测出来的,不是推论的。这才是 User-Agent 字串被拿来 回答的那些问题的正确答案:

// 脆弱——新浏览器出现、或字串改了就坏
if (/Safari/.test(navigator.userAgent)) { … }

// 正确——问的就是你真正想问的
if ('showOpenFilePicker' in window) { … }

功能侦测不可能对「现在」判断错误。UA 判别则是在猜「这个名字代表支援哪些功能」,而每当某个浏览器 新增能力、或有新浏览器出现,它就错一次。

这个字串只有两种诚实的用途:告诉人类他正在用哪一个浏览器——也就是这一页在做的事——以及 绕过某个特定版本里有纪录的特定臭虫。除此之外都该用功能侦测。

User-Agent Client Hints

Chromium 系的浏览器透过 navigator.userAgentData 把同样的信息以结构化数据提供,敏感的部分要 另外索取。它解决了解析的问题,没有解决信任的问题:浏览器在那里一样可以回报任何它想回报的东西。

Firefox 与 Safari 都没有实作,所以那个字串短期内不会消失。

其他几项读数

读数但书
语言你的 Accept-Language 顺序,网站用它挑语系
时区从你的系统时钟推得,不是从你的位址
CPU 核心数可能被上限或取整,以降低指纹辨识
装置内存只有 Chromium 有,而且刻意粗略——超过 8 一律回报 8
Do Not Track几乎没有网站理会,且正被浏览器移除

Do Not Track 值得多说一句。它从来只是请求而非要求,而在几乎没有网站遵守的情况下,送出这个标头 反而让浏览器更容易被识别,而不是更难。多数浏览器现在已经拿掉这个设定了。

这里没有任何东西被送出去

每一个数值都是从你自己的浏览器读出来再显示的。这一页没有服务器端。这件事有点讽刺:一个讲「你的 浏览器泄漏了什么」的页面,正好是把这些全部留在原地的页面。