User Agent 解析

不知道的時候,它就寫「未知」。

本機處理

完全在你的瀏覽器裡執行 —— 打開開發者工具的 Network 分頁就能驗證

瀏覽器
排版引擎
作業系統
裝置
裝置類型
CPU 架構
不是爬蟲/機器人
不是App 內建瀏覽器
0字串長度

還沒有東西可以解析。JavaScript 執行時會自動載入你自己的 User Agent;你也可以從伺服器記錄裡貼別人的字串進來。

解析是在這一頁裡用我們自己寫的大約六十條正則完成的。我們刻意沒有用那個最熱門的解析套件:它從第 2 版起改為 AGPL-3.0-or-later,會對網路服務產生源碼揭露義務。

這串字的每一段是什麼意思

還沒有內容 —— 輸入或貼上一些文字。

直接從這個瀏覽器讀到的(不是從上面那串字解析的)

這一頁會自動載入你自己的 User Agent。你也可以換成任何一串從伺服器記錄裡撈出來的字串,看看它到底能誠實讀出什麼、不能讀出什麼,以及每一段實際上是什麼意思。

這串字大半是歷史小說

每一個現代瀏覽器的 User Agent 都以 Mozilla/5.0 開頭 —— 這一段從 1990 年代起就沒有意義,留下來只因為早年網站會檢查它。Chromium 系瀏覽器不管真實引擎版本是多少,一律回報 AppleWebKit/537.36。WebKit 系瀏覽器自稱「like Gecko」,那是相容性宣稱不是事實。Android 上的 Chrome 字串裡有 Safari,所以「字串含 Safari」這個判斷會把 Chrome 也判進去。

Edge 是「為什麼這件事很難」最清楚的例子。它自稱 Edg,刻意不加最後那個 e —— 為了讓判斷 Edge 的舊程式不會誤觸,同時讓判斷 Chrome 的舊程式繼續有效。而因為它同時也回報 Chrome,任何「先檢查 Chrome、後檢查 Edg」的解析器都會給出錯的瀏覽器。這一頁的檢查順序是能給出正確答案的那個順序,而下面的逐段表會讓你看到為什麼順序會決定結果。

真的無法判斷的東西

Windows 11 送出的字串跟 Windows 10 完全一樣,都是「Windows NT 10.0」。沒有任何解析器能從字串分辨這兩者,聲稱做得到的都是在猜。Chrome 現在把次版本號凍結,所以現代 Chromium 的字串會是 126.0.0.0,精確建置版本在設計上就取不到。iOS 字串結尾那組建置代碼會隨版本變動,它不是版本號。

更根本的是:整串字是一個請求標頭,也就是「客戶端選擇要送什麼」。瀏覽器擴充功能會改寫它、隱私工具會隨機化它、爬蟲會原封不動抄一個真瀏覽器的字串、企業代理會加上自己的標記。請把解析結果當成一個「宣稱」而不是一次「量測」—— 對任何從 User Agent 推導出來的東西,這都是正確的心態。

Client Hints:官方指定的接班人

瀏覽器正在刻意減少 User Agent 字串裡的資訊,把它們搬到 User-Agent Client Hints —— 一組獨立的標頭,而且伺服器必須主動要求才拿得到。低熵的部分預設會送;高熵的部分(完整版本、平台版本)要伺服器明確索取。這也正是「瀏覽器願意配合時,Windows 11 才分得出來」的原因。

因為這些是從當下的瀏覽器直接讀的、不是從文字解析的,所以它們放在下面自己的區塊,而且只有在你的瀏覽器有提供時才會有值。Safari 與 Firefox 沒有實作,所以「這一區是空的」是一個有效的答案而不是故障 —— 而任何依賴 Client Hints 的伺服器端功能都必須有退路。

爬蟲,以及為什麼自稱不能當證據

守規矩的爬蟲會自己報名字 —— Googlebot、Bingbot、GPTBot、ClaudeBot、PerplexityBot 等等 —— 這讓它們很容易被認出來,也同樣容易被冒充。任何人都可以送出任何字串,所以純粹靠 User Agent 裡的爬蟲名稱去封鎖或放行流量,是拿一個未經驗證的宣稱在做決定。

標準的驗證方式是對來源位址做反向 DNS 查詢,再對查到的主機名做正向查詢 —— 主要幾家爬蟲營運者都有文件也都支援。這個工具告訴你「這串字宣稱了什麼」;要確認那個宣稱是網路操作而不是字串操作,我們寧可把這條線畫清楚,也不要讓你以為解析結果就是證明。

本機執行,而且沒有授權有問題的依賴

解析在這個分頁裡跑,用的是我們自己寫的大約六十條正則。我們刻意避開那個最熱門的解析套件:它從第 2 版起採用 AGPL-3.0-or-later,會對「透過網路提供的軟體」產生源碼揭露義務。它的 1.x 系列是 MIT,但這種規模的一頁根本不需要多一個依賴。

你的瀏覽器資訊不會被傳出去。查 User Agent 的頁面通常是由會記錄這次造訪的網站提供的,而 User Agent 字串本身是最強的指紋輸入之一 —— 這正好是「這個工具應該是一個送不出任何東西的工具」的好理由。

常見問題

你能分辨我用的是 Windows 10 還是 11 嗎?

從 User Agent 字串不行,兩者都送 Windows NT 10.0。如果你的瀏覽器提供帶平台版本的 User-Agent Client Hints,下面那一區就分得出來。

為什麼我的 Chrome 版本結尾是 0.0.0?

Chrome 刻意凍結次版本號以降低指紋辨識度。精確的建置編號已經不在字串裡了。

為什麼我這串字每個欄位都顯示「未知」?

因為它不符合任何已知樣式,而我們不猜。自訂客戶端、罕見爬蟲與刻意偽造的 UA 在真實記錄裡很常見,而一個很有信心的錯答案比「未知」更糟。

User Agent 裡的爬蟲名稱可以相信嗎?

不行。任何人都可以送出任何字串。要驗證爬蟲,請對來源 IP 做反向 DNS 查詢,再對主機名做正向查詢。

我的 User Agent 會被送到你們的伺服器嗎?

不會。解析在你的瀏覽器裡完成。當然,你的瀏覽器在請求這一頁時本來就會照常送出 User Agent(對每個網站都一樣),但這裡不會額外收集任何東西。