User Agent 解析
貼上任意 User-Agent 字串,解析出瀏覽器、渲染引擎、作業系統、裝置型別與 CPU 架構,並可複製 JSON 結果。
把 User-Agent 字串變成人能看懂的資訊。 預設已載入你當前瀏覽器的 User-Agent。貼上其他字串即可看到解析結果,JSON 明細可直接複製到缺陷單或測試用例裡。
貼上任意 User-Agent 字串,解析出瀏覽器、渲染引擎、作業系統、裝置型別與 CPU 架構,並可複製 JSON 結果。
把 User-Agent 字串變成人能看懂的資訊。 預設已載入你當前瀏覽器的 User-Agent。貼上其他字串即可看到解析結果,JSON 明細可直接複製到缺陷單或測試用例裡。
現代 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 也做了類似的模糊處理。如果一個版本號圓整得可疑,那它多半就是被凍結過的。
裝置識別是最不可靠的一環。字串里根本沒有裝置欄位,只能靠 Mobile、iPad、Tablet 這類標記的有無來推斷。安卓平板是經典陷阱——很多隻能靠缺少 Mobile 標記來判斷;而 iPadOS 在預設配置下會刻意把自己偽裝成桌面版 Mac。
只要是會改變行為的判斷,都應該檢測能力而不是標籤。if ('share' in navigator) 是正確且長期有效的寫法;if (isSafari) 會在另一個引擎實現同一 API、或 Safari 修好某個缺陷的那一刻失效。至於佈局,CSS 媒體查詢對實際視口和輸入方式的描述,遠比任何裝置猜測準確。
User-Agent 真正不可替代的場景是資料分析、崩潰歸類和缺陷復現。知道某個堆疊只出現在 Gecko 上、某個佈局錯位只限於三星瀏覽器,就能把一份無法復現的反饋變成明確的測試用例。現代的替代方案是 User-Agent Client Hints API,它以結構化欄位暴露同樣的事實,並且完整平臺版本這類高熵資訊必須顯式申請才能拿到。