User Agent 解析

貼上任意 User-Agent 字串,解析出瀏覽器、渲染引擎、作業系統、裝置型別與 CPU 架構,並可複製 JSON 結果。

把 User-Agent 字串變成人能看懂的資訊。 預設已載入你當前瀏覽器的 User-Agent。貼上其他字串即可看到解析結果,JSON 明細可直接複製到缺陷單或測試用例裡。

瀏覽器
渲染引擎
作業系統
裝置型別
CPU 架構

User-Agent 為什麼長成這樣

三十年互相假扮的歷史沉積

現代 User-Agent 與其說是描述,不如說是一層層化石。幾乎所有桌面瀏覽器仍以 Mozilla/5.0 開頭,而這個標記自 Netscape 輸掉瀏覽器大戰之後就不再有任何含義。它之所以留下來,是因為早期伺服器會先嗅探 Mozilla 再決定是否下發框架頁面,於是每個競爭者都加上這個標記以免被降級。只要有一個瀏覽器靠撒謊拿到了更好的頁面版本,其餘瀏覽器就必須撒一模一樣的謊,否則就會流失使用者。

字串的其餘部分也是同一個螺旋的產物。Chrome 早在 2013 年就不再使用 WebKit,KHTML 更是消亡已久,但它至今仍傳送 AppleWebKit/537.36 (KHTML, like Gecko)。Edge 用 Edg/ 而不是 Edge/,正是因為太多站點對舊標記做了子串匹配並返回錯誤的降級頁面。Safari 的真實版本藏在 Version/ 標記裡,末尾的 Safari/537.36 早已凍結。所以解析必須按從最具體到最寬泛的順序進行:每個 Chromium 分支都自稱 Chrome,每個 WebKit 瀏覽器都自稱 Safari,只能讓第一個確定的匹配勝出。

哪些能信,哪些不能

這是一個由客戶端提供的請求頭,因此它只是線索,永遠不是證據。任何 HTTP 客戶端都可以隨意填寫,使用者也常常通過擴充套件或開發者工具偽造。把它當作日誌裡的輔助資訊,而不是鑑權輸入或安全邊界。

即便沒人撒謊,這些值也越來越粗。Chrome 和 Edge 現在把次版本段凍結為 0.0.0 並上報簡化的平臺串,Windows NT 10.0 同時覆蓋 Windows 10 和 Windows 11,macOS 更是無論實際版本都固定在 10_15_7 多年。Firefox 也做了類似的模糊處理。如果一個版本號圓整得可疑,那它多半就是被凍結過的。

裝置識別是最不可靠的一環。字串里根本沒有裝置欄位,只能靠 MobileiPadTablet 這類標記的有無來推斷。安卓平板是經典陷阱——很多隻能靠缺少 Mobile 標記來判斷;而 iPadOS 在預設配置下會刻意把自己偽裝成桌面版 Mac。

大多數情況下應改用特性檢測

只要是會改變行為的判斷,都應該檢測能力而不是標籤。if ('share' in navigator) 是正確且長期有效的寫法;if (isSafari) 會在另一個引擎實現同一 API、或 Safari 修好某個缺陷的那一刻失效。至於佈局,CSS 媒體查詢對實際視口和輸入方式的描述,遠比任何裝置猜測準確。

User-Agent 真正不可替代的場景是資料分析、崩潰歸類和缺陷復現。知道某個堆疊只出現在 Gecko 上、某個佈局錯位只限於三星瀏覽器,就能把一份無法復現的反饋變成明確的測試用例。現代的替代方案是 User-Agent Client Hints API,它以結構化欄位暴露同樣的事實,並且完整平臺版本這類高熵資訊必須顯式申請才能拿到。

開源說明:使用原生 JavaScript 實現,不依賴第三方庫。

常見問題

為什麼 Chrome 同時自稱 Mozilla 和 Safari?
純屬歷史相容。伺服器過去先嗅探 Mozilla 才傳送現代標記,後來又嗅探 Safari 才傳送 WebKit 專用 CSS。各家瀏覽器都加上這些標記以免拿到降級頁面,如今再刪掉反而會弄壞那些仍在檢查的站點。
能不能用 User-Agent 做安全判斷?
不能。它是客戶端完全可控的請求頭,可以填成任意值。只應用於診斷和統計。任何涉及訪問控制或策略強制的邏輯,都必須依賴認證,而不是這種自報的字串。
為什麼我的 macOS 版本顯示成 10.15.7?
Safari 和 Chrome 有意把上報的 macOS 版本凍結在 10_15_7,以縮小指紋面。瀏覽器知道真實版本,但不會放進請求頭。Client Hints 可以提供,但必須站點明確申請。
工具怎麼區分平板和手機?
它會查詢 iPad 標記、不含 Mobile 的 Android 串,或顯式的 Tablet 標記。這與多數庫的做法一致,但本質上仍是啟發式。部分安卓平板僅憑字串確實無法與大屏手機區分。
我的 User-Agent 會被上傳嗎?
不會。解析完全用正則在你的瀏覽器本地完成,不上傳任何內容。預設值讀取自本地的 navigator.userAgent,始終不離開當前頁面。
除了嗅探 User-Agent 還有什麼更好的做法?
能力判斷用特性檢測,佈局用 CSS 媒體查詢,確實需要平臺資訊時用 User-Agent Client Hints API。Client Hints 給出的是結構化欄位,且高熵細節需要顯式申請。