白話解說 User-Agent 字串:它長什麼樣、如何逐段讀懂、為何仍寫著 Mozilla,以及如何幾秒內查看你自己的。
每次瀏覽器載入頁面時,都會附帶送出一小段文字,稱為 User-Agent 字串——一個自我宣告的標籤,宣告你正在使用哪種瀏覽器、核心與作業系統。乍看之下它像一堆亂碼,但每一部分都是獨立的令牌,讀懂它就能準確知道網站以為自己正在跟什麼打交道。
核心要點
- User-Agent(UA)是一個 HTTP 標頭,隨每次請求送出,標明你的瀏覽器、核心、作業系統與裝置類型。
- 它讀起來像
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36——是一串令牌,而非一句完整片語。 - 幾乎所有瀏覽器的 UA 都以
Mozilla/5.0開頭,這是歷史相容性原因造成的,並不代表它真的是 Mozilla 出品的軟體。 - 你可以在 DevTools 執行
navigator.userAgent立即讀出自己的 UA,或直接查看瀏覽器送出的請求標頭。 - 由於這個字串是自我宣告且極易修改的,Chromium 正逐步轉向 User-Agent Client Hints,一種結構更清楚、可驗證性更高的替代方案。
User-Agent 字串究竟是什麼?
User-Agent 字串是瀏覽器在每次 HTTP 請求中主動附上的一行文字,位於一個名為 User-Agent 的標頭裡。它的作用是讓伺服器據此調整回應:向手機送出行動裝置友善的版面、向非常老舊的瀏覽器提示某功能不受支援,或單純記錄哪些瀏覽器實際造訪了網站。它自 1990 年代初最早的瀏覽器時代就已存在,而其格式為了向下相容一直沿用至今——這正是它如今看起來如此雜亂的原因。
一個真實 User-Agent 字串的解剖
以下是一個典型的桌面版 Chrome UA 字串,按部分拆解:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/124.0.0.0 Safari/537.36
| 令牌 | 意義 |
|---|---|
Mozilla/5.0 | 一個歷史遺留的相容性令牌——見下文,並不代表這是 Mozilla/Firefox 瀏覽器 |
(Windows NT 10.0; Win64; x64) | 作業系統(Windows 10/11)與 CPU 架構(64 位元) |
AppleWebKit/537.36 | 渲染核心所承襲的底層引擎系譜 |
(KHTML, like Gecko) | 一句聲稱其行為與另外兩個歷史核心相似的相容性片語 |
Chrome/124.0.0.0 | 實際的瀏覽器名稱及其版本號 |
Safari/537.36 | 另一個相容性令牌,之所以存在是因為 Chrome 的核心 Blink 是從 WebKit(Safari 的核心)分支而來 |
Firefox 與 Safari 遵循相同的模式,只是令牌不同——Firefox 是 Gecko/20100101 Firefox/125.0,Safari 是 Version/17.4 Safari/605.1.15——但整體結構(平台資訊、核心令牌,再到瀏覽器名稱與版本)在各家瀏覽器間是一致的。
為什麼幾乎所有瀏覽器仍寫著「Mozilla」
這是最讓人困惑的部分:Chrome、Safari、Edge,甚至一些非瀏覽器工具,其 UA 都以 Mozilla/5.0 開頭,儘管它們與 Mozilla 專案毫無關係。簡單說說這段歷史:1990 年代中期,Netscape Navigator 的內部代號就叫「Mozilla」,當時的網站開始檢查這個令牌,來判斷訪客的瀏覽器是否支援當時較為先進的功能(例如框架)。當 Internet Explorer 也想啟用同樣的功能時,它在自己的 UA 字串裡加上了 Mozilla,以通過這些檢查。此後每一款新瀏覽器都照做,以避免被伺服器送回精簡版頁面,這個令牌就此永久留了下來。它是 1990 年代瀏覽器偵測大戰留下的化石,而非有實際意義的識別碼——是網路歷史上最著名的怪癖之一。
如何查看你自己的 User-Agent
有兩種方式可以查看,它們偶爾會不一致:
透過 JavaScript,開啟瀏覽器開發人員工具的主控台,執行:
navigator.userAgent
這會回傳頁面指令碼能讀到的確切字串。
透過原始請求,開啟開發人員工具的 Network 面板,重新整理頁面,點擊任一請求,在請求標頭中查看 User-Agent。這是伺服器實際收到的內容——通常與 navigator.userAgent 完全一致,但瀏覽器擴充功能或代理伺服器可能只改寫其中一個而不動另一個,這種不一致本身就是可被偵測到的訊號。
BrowserInsight 的核心檢測工具會並排顯示你宣告的 User-Agent 與瀏覽器實際使用的渲染核心,讓你一眼看出兩者是否相符。
User-Agent 作為身分與指紋識別訊號
由於 UA 字串在每次請求中都會不請自來地揭露作業系統、架構、瀏覽器與版本資訊,它一直以來也扮演著一種被動的身分識別訊號——是構成瀏覽器指紋的眾多輸入之一。這也是為什麼 Chromium 正逐步將這個舊版字串凍結為通用存根,轉而擁抱 User-Agent Client Hints(UA-CH)——一種僅在伺服器明確要求時才揭露細節的結構化 API,而非預設廣播一切。
一個提醒:偽裝很容易,但被識破也很容易
由於 UA 字串只是自我宣告的文字,修改它只需要一個瀏覽器設定或一個擴充功能。人們出於測試、存取受瀏覽器限制的內容,或隱私考量而這麼做。但 UA 只是瀏覽器暴露的數十個訊號之一,其餘訊號很少會一併修改以保持一致——因此,一個聲稱是 Safari、但其 JavaScript 引擎、client hints 與渲染細節都透露另一套說法的頁面,很快就會被網站識破這種矛盾。若你想了解這種偵測具體如何運作,可參考如何偵測 User-Agent 偽裝。給出於好奇修改 UA 的人的提醒是:這只改變了一個標頭所宣告的內容,並不會改變你的瀏覽器實際是什麼。
常見問題
為什麼我的 User-Agent 寫著「like Gecko」,可我用的並不是 Firefox?
(KHTML, like Gecko) 是另一個相容性化石,並非對你實際使用核心的真實聲明。它表示對 Gecko/KHTML 時代版面行為的廣泛支援,好讓為那些核心撰寫的老網站依然能正常渲染。無論實際執行的是哪種核心,它都會出現在 Chrome、Safari 與 Edge 中。
User-Agent 字串就等於我的瀏覽器指紋嗎?
不是——它只是指紋的一項輸入,而非指紋本身。完整的瀏覽器指紋會綜合 UA 與 canvas 渲染、WebGL 輸出、字型、螢幕參數等多項訊號。僅憑 UA 只能識別大致類別(瀏覽器家族、粗略的作業系統),無法單獨唯一識別某台裝置。
兩個不同的瀏覽器能有相同的 User-Agent 嗎?
可以。由於這個字串是自我宣告的,任何瀏覽器技術上都能送出它想要的任意 UA 文字,包括直接照抄自另一款完全不同的瀏覽器。這正是為什麼網站會將 UA 與其他訊號交叉核對,而不是單獨信任它。
User-Agent 字串最終會消失嗎?
不會立刻消失,但它的角色正在縮小。Chromium 正逐步將舊版字串凍結為低細節存根,同時讓 User-Agent Client Hints 接手成為主要的結構化通道。Firefox 與 Safari 目前沒有對應的 UA-CH 實作,仍依賴傳統字串。
結論
User-Agent 字串看起來很神秘,但其實只是一份累積了三十多年、充滿相容性考量的令牌清單——平台資訊、核心系譜,再加上瀏覽器名稱與版本,都是瀏覽器們為了不互相破壞對方網站而逐步疊加的結果。一旦掌握了這個模式,讀懂它就很直接;檢查你自己的 UA,在開發人員工具裡只需一行程式碼。因為它是自我宣告的,請把它當作一種「聲稱」而非保證——如果你想看看自己真實的核心與身分訊號是否與 UA 所聲稱的相符,不妨執行 BrowserInsight 的核心檢測工具。
延伸閱讀:


