我第一次必須批量理解用戶代理字串是在 SEO 專案期間 wpadminify.com,盯著伺服器存取日誌,試圖找出有多少流量是真實的人,有多少是爬蟲。我有一列字串,全部都是從開始的 Mozilla/5.0,所有人都提到了 Safari,其中一半人謊稱自己是一個瀏覽器,但實際上卻是另一個瀏覽器。透過眼睛閱讀它們是沒有希望的。這就是使用者代理解析器所做的工作,經過太多次的艱苦努力,我將其內建到其中 工具。dev. 這是它的指南,也是它後面令人驚訝的混亂標題的指南。
TL;DR: 工具 用戶代理解析器 採用使用者代理字串,將其分為瀏覽器、渲染引擎、作業系統、裝置類型和 CPU 架構。它應用標頭和#39的偵測順序;它滿足怪異需求,因此 Edge 不會被誤讀,因為 Chrome 和 mobile Safari 是從其真實版本令牌中讀取的。它還標記已知的機器人。一切都運行客戶端:不上傳、不註冊、真實日誌行安全。
什麼是使用者代理字串?
使用者代理字串是 的值 User-Agent 瀏覽器或 HTTP 用戶端幾乎隨每個請求發送請求標頭。標頭定義於 RFC 9110HTTP 語意規範,將其描述為一系列產品識別碼和註釋,讓伺服器識別發出請求的軟體。實際上,它命名瀏覽器、其版本、渲染引擎、作業系統,通常還命名設備。
其目的是合理的:為伺服器提供一種知道連接內容的方法,以便他們可以調整回應或收集統計數據。現實情況是,該字串已成為網路上最不值得信賴的自我報告資料之一,不是因為它是惡意的,而是因為二十年的相容性駭客已經將令牌分層,直到明顯的讀數通常是錯誤的。
這是 Windows 上的現代 Chrome 字串:
Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36
它聲稱是 Mozilla,提到了 AppleWebKit,並以 Safari 一詞結尾。這不是那些東西;它是鉻。之前的每個令牌 Chrome/126 是歷史沉積物。解析器的存在正是因為你不能相信看起來最權威的令牌。
為什麼解析使用者代理程式如此容易出錯?
標頭透過模仿而增長。在早期的瀏覽器戰爭中,伺服器檢查使用者代理程式來決定發送哪個版本的頁面,並且他們檢查得很笨拙,通常使用簡單的子字串匹配。想要接收好的現代頁面的新瀏覽器必須包含伺服器正在尋找的令牌,因此每個瀏覽器都複製了先前的獲勝者。 Netscape 自稱為 Mozilla,因此 Internet Explorer 聲稱與 Mozilla 相容。當 WebKit 瀏覽器到達時,它們攜帶 Mozilla 和 KHTML 令牌。 Chrome 從 WebKit 分叉出來,保留了 AppleWebKit 和 Safari,以便 WebKit 嗅探伺服器能夠很好地處理它。結果是,一個字串可以誠實地包含四個不同瀏覽器譜系的名稱。
這為任何閱讀字串的人創建了具體的陷阱:
- Edge 和 Opera 都包含
Chrome. Microsoft Edge 附加Edg/126.0.0.0歌劇附後OPR/,但兩者也都承載著全部Chrome/126令牌,因為它們是基於鉻的。首先測試 Chrome,您將每個 Edge 和 Opera 用戶標記為 Chrome。 - Safari 隱藏了其真實版本。 在桌面和 iOS 上,Safari 在 a 中報告其面向使用者的版本
Version/17.5代幣,而Safari/604.1接近末尾的令牌是 WebKit 建置號,而不是瀏覽器版本。閱讀Safari/作為版本,你會得到一個毫無意義的數字。 - iOS 上的 Chrome 不是 Chrome's 引擎。 Apple 要求所有 iOS 瀏覽器都使用 WebKit,因此 iPhone 上的 Chrome 會報告
CriOS並運行 WebKit,而不是 Blink。 iOS 上的 Firefox 是FxiOS,還有網路套件。 - Windows 11 不存在於字串中。 Microsoft 從未碰過 NT 核心令牌,因此 Windows 10 和 Windows 11 都會報告
Windows NT 10.0. 字串根本無法區分它們。
解析器是一小堆了解這些陷阱的有序規則。這確實是一切,但正確排序就是整個遊戲。
Toolz 使用者代理程式解析器如何運作?
的 解析器 運行一系列檢查,其順序對上面的陷阱進行編碼。它首先尋找嵌入另一個瀏覽器的瀏覽器's令牌。 Chrome 之前的 Edge、Chrome 之前的 Opera、Chrome 之前的 Samsung Internet 和 UC 瀏覽器,所以借用了 Chrome 令牌永遠不會偶然獲勝。它讀出了 Safari Version/ 令牌而不是它的 Safari/ 建置令牌。它識別 iOS 變體 CriOS 和 FxiOS 分別為 Chrome 和 Firefox,同時正確將其引擎報告為 WebKit。
對於作業系統,它將 Windows NT 核心編號對應到行銷名稱,因此 Windows NT 6.1 成為 Windows 7 和 Windows NT 10.0 成為 Windows 10 或 11,誠實地表示為一對,因為字串確實無法區分它們。它恢復了 iOS 和 macOS 版本的點狀形式,標題用下劃線編寫這些版本 17_5並且它識別 Android、Chrome OS 和 Linux。
對於設備,它將請求分類為桌面、行動、平板電腦或機器人。平板電腦規則很繁瑣:iPad 是平板電腦,Android 裝置沒有 Mobile 代幣是一塊平板電腦,以及任何匹配的東西 Mobile, iPhone,或者 Windows Phone 是一部手機。當字串公開裝置模型(例如 Android 建置字串或 Apple 產品名稱)時,解析器會對其進行表面處理。
它還標記機器人。這是我最常接觸到的領域,因為當您閱讀存取日誌時,最有用的問題是有多少流量是自動化的。解析器匹配一組廣泛的簽名,涵蓋搜尋爬蟲、社交預覽獲取器和命令列用戶端。
使用者代理可以告訴您什麼,不能告訴您什麼?
值得精確地了解限制,因為將字串視為事實會導致錯誤的決定。
| 問題 | UA可以回答嗎? | 筆記 |
|---|---|---|
| 哪個瀏覽器系列 | 通常是的 | 具有正確的檢測順序 |
| 精確的瀏覽器版本 | 通常是的 | 逐漸凍結或減少 |
| 作業系統名稱 | 通常是的 | Windows 10 與 11 是不可能的 |
| 設備類型 | 大致地 | 啟發式,不保證 |
| 精確的設備模型 | 有時 | 僅當字串包含它時 |
| 客戶是否真實 | 不 | 簡單易懂 |
| 螢幕尺寸或功能 | 不 | 而是使用特徵檢測 |
最後兩行最重要。使用者代理程式是自我報告的,可以在一行程式碼中更改,由任何 HTTP 用戶端設置,也可以由瀏覽器凍結以保護隱私。刮刀可以在 Windows 上宣布自己為 Chrome,字串中沒有任何內容與之相矛盾。因此,解析的結果告訴您客戶端聲稱的內容,這對於統計和調試很有用,但不能證明任何內容。當您需要知道瀏覽器實際上可以做什麼時,請使用 JavaScript 進行功能檢測,而不是從名稱推斷功能。這與編寫彈性前端程式碼背後的原理相同 web 開發人員工具包 綜述返回重複。
使用者代理字串消失了嗎?
不完全正確,但它們正在被故意減少。 Chromium 瀏覽器多年來一直在凍結和修剪舊字串,限制其暴露的細節水平,尤其是次要版本號和一些平台細節。替代品是 使用者代理客戶提示,一種伺服器準確詢問其需要的客戶端資訊的機制 Sec-CH-UA 請求標頭和 navigator.userAgentData JavaScript API,它必須解析,而不是接收一個長字串。客戶端提示也是 Windows 10 與 11 差異最終可用的地方 Sec-CH-UA-Platform-Version.
未來幾年的實際結果是兩者都存在。經典 User-Agent 標頭仍然會根據來自每個瀏覽器和每個非瀏覽器客戶端的每個請求提供,並且大量工具、分析和伺服器端邏輯仍然可以讀取它。因此,解析字串仍然是識別客戶端的最便攜方式,即使更豐富的資料轉移到客戶端提示。如果您正在建立新內容並想要精確的平台版本,請閱讀客戶端提示;如果您正在分析現有日誌或支援最廣泛的客戶端,請解析字串。
如何使用解析器?
流程故意簡單。將使用者代理字串貼到方塊中,或按一下內建範例之一以查看代表性的桌面、行動裝置或機器人字串。要取得自己的瀏覽器控制台並鍵入 navigator.userAgent,然後貼上結果。當您鍵入時,瀏覽器、引擎、作業系統、裝置類型、CPU 架構和機器人標誌會即時更新,無需按下按鈕。當您想要其他地方的結果時,請將其複製為選項卡分隔的表格,乾淨地貼上到電子表格或錯誤報告中。
因為整個內容都在您的瀏覽器中運行,所以您可以貼上原始存取日誌行或真實訪客字串,而無需任何一個離開您的電腦。該客戶端模型是經過深思熟慮的,並且是網站上每個工具背後的相同模型,在 中進行了解釋 資料隱私線上工具 引導。對於憑證,您正在與請求一起調試 基本驗證產生器 和 JWT解碼器 遵循相同的免上傳方法。
解析器與其他 Web 工具配合的位置
使用者代理解析器位於網站上一小群請求和回應工具中。當您檢查網域的流量時, 域搜尋 工具回答誰擁有並經營它。當請求攜帶您需要檢查的承載令牌時, JWT解碼器 從中讀出聲明。當您首先建立經過身份驗證的請求時, 基本驗證產生器 建構 Authorization 標題。當您研究頁面如何呈現給爬蟲時,爬蟲會在自己的使用者代理程式下讀取您的頁面 元標籤產生器 塑造他們消耗的標籤。
對於任何組裝一套個人這些的人來說, 開發人員生產力工具 指南介紹了網站上基於瀏覽器的實用程式如何適應工作日。將它們保持在一起的要點是,調試 HTTP 互動很少只涉及這些問題之一。
實用的工作流程:讀取流量日誌
讓我透過讓我走上這條路的任務來具體化這一點。您已匯出一段存取日誌,並且想要理解它。天真的方法是關注用戶代理列,這正是陷阱咬住的地方。禮貌地將自己識別為的爬蟲 Googlebot 這很容易,但宣布自己是普通 Chrome 構建的無頭刮刀看起來與真正的訪客相同,直到您檢查其他信號。
解析器有兩個幫助。首先,機器人標誌立即捕捉誠實的爬蟲和常見的自動化客戶端,因此您可以一次將明顯的機器流量與人流量分開。其次,剩餘流量的正確瀏覽器和作業系統故障會告訴您有關受眾的真實資訊:它是否會扭曲行動裝置、哪個作業系統占主導地位、舊瀏覽器是否仍然足夠重要以進行測試。在 WP Adminify 工作中,該故障改變了我們優先測試哪些瀏覽器,並確認大部分看起來像有機流量的內容是預覽和監控機器人而不是閱讀器。解析字串將噪音牆變成了決策。
要遵守的一門紀律是限制部分中的紀律:解析的結果是聲明,而不是證明。確定的刮刀將偽造一個令人信服的字串,並且任何解析器都無法僅從用戶代理處捕獲該字串。當風險很高時,將解析與請求模式、速率和其他訊號結合。不過,對於日常統計和調試來說,正確的解析正是您所需要的,而手動執行則是錯誤。
渲染引擎和 CPU 欄位告訴我什麼?
其中兩個解析欄位的關注度低於瀏覽器和作業系統,但兩者都很有用。渲染引擎是實際將 HTML 和 CSS 轉換為像素的元件,它比瀏覽器名稱更好地預測頁面的行為。 Chrome、Edge、Opera、Brave、Samsung Internet 和大多數其他產品共用 Blink 引擎,因此其中出現的渲染錯誤通常會出現在所有引擎中; Firefox 使用 Gecko; Safari 以及 iOS 上的每個瀏覽器都使用 WebKit。當您對佈局錯誤進行分類時,按引擎而不是瀏覽器名稱對流量進行分組會告訴您必須測試多少個真正不同的渲染路徑(通常只有三個)。
解析器從平台令牌而不是瀏覽器標籤派生引擎,這就是為什麼它可以報告 Chromium 瀏覽器的 Blink 和 Safari 的 WebKit,儘管兩者都源自相同的 AppleWebKit 令牌。它還捕獲較舊的引擎,即用於 Internet Explorer 的 Trident 和用於舊版 Edge 的 EdgeHTML,這些引擎仍然顯示在企業日誌中。
CPU 架構欄位讀取平台令牌 x86_64, Win64, arm64,以及他們的親屬,報告客戶端是 64 位元、32 位元還是 ARM 機器。這是檢查您何時提供特定於平台的下載並需要知道訪客可以運行哪個版本的字段,並且它是顯示您的受眾群體有多現代的安靜信號#39;硬體是。
常見問題
什麼是使用者代理字串? 使用者代理字串是瀏覽器或用戶端隨每個請求發送的使用者代理 HTTP 標頭的值。它是 RFC 9110 中定義的命名瀏覽器、其渲染引擎、作業系統以及裝置的產品令牌清單。伺服器讀取它以識別連接到它們的軟體。
如何找到自己的用戶代理? 打開你的瀏覽器's 開發人員控制台並鍵入 navigator.userAgent,然後按 Enter。它列印的字串正是瀏覽器傳送到伺服器的字串。將其貼上到使用者代理程式解析器中以查看其解碼到的瀏覽器、作業系統和裝置。
為什麼 Chrome's User-Agent 包含 Safari 一詞? 為了向後相容。 Chrome 將其引擎從 Apple' 分叉出來; WebKit 和早期伺服器在提供現代頁面之前檢查了 Safari 令牌,因此 Chrome 保留了它以避免降級。同樣的歷史記錄是為什麼幾乎每個瀏覽器仍然使用 Mozilla/5.0 開始其字串。
使用者代理程式可以告訴 Windows 10 和 Windows 11 嗎? 否。兩者都報告 Windows NT 10.0,因為 Microsoft 從未增加 Windows 11 的 NT 核心令牌,因此僅靠字串無法區分兩者。區分它們的現代方法是使用者代理用戶端提示,特別是 Sec-CH-UA-Platform-Version 標頭。
使用者代理對於識別設備是否可靠? 這是一個有用的提示,而不是證明。用戶代理可以在一行程式碼中進行更改,這些程式碼由任何 HTTP 用戶端設定、由抓取器欺騙或由瀏覽器凍結以維護隱私。將解析的結果視為客戶端聲稱的結果,並在準確性重要時將其與其他訊號結合。
解析器如何偵測機器人和爬蟲? 它將字串與廣泛的已知簽名列表進行匹配,包括 Googlebot 和 Bingbot 等搜尋爬蟲、社交預覽獲取器以及 curl、wget 和無頭 Chrome 等自動化用戶端。任何匹配都會設定機器人標誌並將設備分類為爬蟲。
在這裡貼上生產日誌使用者代理程式安全嗎? 是的。所有解析都發生在使用 JavaScript 的瀏覽器中,並且字串永遠不會發送到任何伺服器。您可以貼上原始存取日誌行或真實訪客使用者代理,而無需他們離開您的裝置。
使用者代理字串是否已棄用? 標頭正在被凍結和減少,而不是被刪除。 Chromium 瀏覽器現在限制了舊字串中的細節,並透過使用者代理用戶端提示公開更豐富的資料。經典字串仍然會附帶每個請求,因此解析它仍然是讀取客戶端詳細資訊的最便攜方式。



