navigator.connection 無需權限提示即可讀取網路速度與延遲,僅 Chromium 支援這件事本身也是一種指紋訊號。
大多數指紋訊號描述的是你的硬體或軟體。Network Information API 描述的是完全不同的東西:承載頁面本身的這條連線——它粗略的速度等級、實測的往返延遲,以及你是否要求瀏覽器省著點用流量。這一切都不需要任何權限提示,而在實作了該 API 的瀏覽器引擎上,任何頁面在載入的瞬間就能讀到它。
核心要點
navigator.connection暴露effectiveType、downlink、rtt和saveData,全程零權限提示——任何指令碼都能在頁面載入時讀取你連線的粗略速度等級。- 這些數值經過刻意的分桶處理,而非原始值,目的是削弱指紋能力——但你落入的那個桶,一旦和其他數十種訊號組合起來,仍會為綜合指紋增加可測量的熵值。
- 僅 Chromium 支援。 Chrome、Edge、Opera 和三星瀏覽器都實作了它;Safari 和 Firefox 都沒有實作
NetworkInformation或navigator.connection。 - 這道鴻溝本身就是一種訊號——指令碼可以把
navigator.connection是否存在,當作一種粗略、難以偽造的引擎檢測手段,完全獨立於 User-Agent 字串聲稱的內容。 - BrowserInsight 的指紋檢測會回報你自己的瀏覽器暴露了哪些網路層屬性,與你指紋中的其他訊號並列展示。
navigator.connection:effectiveType、downlink、rtt、saveData
該 API 在 navigator.connection 上掛載了單一個 NetworkInformation 物件。在實作了它的瀏覽器上,讀取只需一行程式碼,且不需要任何使用者互動:
const conn = navigator.connection;
console.log(conn.effectiveType); // "4g"、"3g"、"2g" 或 "slow-2g"
console.log(conn.downlink); // 估計頻寬(Mbps),先四捨五入到最近的 25 kbps 再分桶
console.log(conn.rtt); // 估計往返延遲(ms),先四捨五入到最近的 25ms 再分桶
console.log(conn.saveData); // 若使用者開啟了資料節省模式則為 true
四個屬性各司其職。effectiveType 是瀏覽器自己依據近期觀察到的 rtt 與 downlink 值,把你的連線歸入四個世代分類之一——slow-2g、2g、3g 或 4g——而非依據實際使用的無線電技術;一條被限速的 Wi-Fi 連線照樣可能讀出 "3g"。downlink 是估計的有效頻寬,rtt 是到目前伺服器的估計往返延遲——兩者都來自瀏覽器近期的真實網路傳輸,而非專為該頁面重新跑一次探測。saveData 單純反映使用者是否開啟了作業系統或瀏覽器層級的「資料節省」模式。部分 Chromium 版本還會暴露一個 type 欄位(wifi、cellular、ethernet、bluetooth、none 或 unknown),不過其可用性因平台而異。
粗粒度剖繪與熵值
規範作者明確指出,原始、持續更新的頻寬與延遲數字本身就會是一個強指紋向量——某一時刻的即時吞吐量讀數,在特定網路路徑上幾乎是唯一的。這正是為什麼 downlink 和 rtt 會被四捨五入並分桶,而非以完整精度回報,也是為什麼 effectiveType 把一切都壓縮進僅僅四個粗粒度等級。這是一項真實的緩解措施,不是做做樣子。
不過它並沒有把貢獻降為零。四檔的 effectiveType、一個 rtt 桶、一個 downlink 桶,加上一個布林型的 saveData 旗標,組合起來依然構成一定數量的可區分狀態——比起 Canvas 雜湊這類訊號要小得多,但一旦被折入螢幕尺寸、字型和 WebGL 輸出組成的綜合指紋,也並非毫無意義。它作為追蹤訊號真正的價值,與其說是原始熵值,不如說是穩定性與跨情境關聯:同一條實體連線往往會在不同網站、乃至幾乎同時開啟的不同分頁之間,回報相同的 effectiveType/rtt 分桶,這就給了追蹤者一條雖弱但免費的線索——兩個工作階段可能共用同一網路——即便 Cookie 與儲存已按站台隔離,這條線索在跨來源關聯活動時依然有用。它同時也是一種合理性檢驗:一個自稱在「4g」行動網路上、卻對住宅 ISP 端點回報低於 20ms RTT 的工作階段,讀起來就很矛盾,就像 IP 地理位置與時區不符 技術那樣,靠的不是任何單一訊號,而是獨立訊號之間的矛盾來發出警報。
僅 Chromium 支援本身就是一種訊號
這個 API 的涵蓋範圍才是最容易被忽略的部分。caniuse.com 的相容性資料表顯示全球支援率大致落在 75%–80% 區間——這並不是因為它是個小眾或實驗性功能,而是因為它在每一款 Chromium 系瀏覽器上都已上線,卻在其他任何瀏覽器上都不存在。Safari 從未實作過 NetworkInformation;Firefox 多年前曾在實驗旗標後面短暫嘗試過早期版本,隨後又移除了它——如今這兩款瀏覽器都不再暴露 navigator.connection。定義這個 API 的 WICG 規範儲存庫本身就掛在與 Chromium 關係密切的 Web Incubator Community Group 名下,而在這個生態圈之外,採用始終沒有真正發生過。
這種不對稱之所以有用,恰恰是因為它不依賴指令碼從連線數值裡讀到了什麼——它只取決於 navigator.connection 是否存在。一段指令碼只需檢查 'connection' in navigator,就能得到一個近乎瞬時、零權限的訊號,把瀏覽器引擎縮小到「某個 Chromium 引擎」還是「非 Chromium」,而完全不依賴 User-Agent 字串或 User-Agent Client Hints 聲稱的內容。這讓它成為一種規模雖小卻確實有用的交叉驗證手段,與 TCP/IP 協定堆疊指紋 或 TLS 指紋識別 屬於同一類訊號:想令人信服地偽造它們很難,因為要嘛得真正執行那個底層引擎,要嘛就得費心重現一個大多數偽裝工具懶得去碰的行為細節。一個自稱是 Safari、卻依然能解析出真實 navigator.connection 物件的 UA 字串偽裝者,正在無聲地自相矛盾。
隱私考量
這項訊號並不需要像 Canvas 或 WebGL 指紋那樣激進的防禦措施,很大程度上是因為 API 本身的設計已經把風險限定住了:
- 分桶處理確實在發揮作用。 由於
downlink和rtt已經是四捨五入、量化過的數值而非原始值,你再自行想辦法進一步遮蔽它們,也不會獲得多少額外保護——規範早已收攏了這個訊號本來最要命的高精度版本。 - 注重隱私的瀏覽器已經從根本上移除了這個暴露面。 由於 Firefox 和 Safari 完全沒有實作這個 API,使用其中任何一款都會徹底消除這一向量——無需任何設定。
- Chromium 使用者手上的直接控制權較少。 頁面沒有像攝影機或定位權限那樣的使用者可見開關來隱藏
navigator.connection,因為這個 API 從一開始設計時就沒有被納入權限模型——它被認為風險足夠低,不需要一道許可關卡。 - 把它當作眾多弱訊號中的一個。 與螢幕幾何、字型和 WebGL 結合起來看,它只是更大指紋中一個微小的增量——值得了解,不值得為它單獨憂心。
- 看看你自己的設定暴露了什麼。 BrowserInsight 的指紋檢測會顯示
navigator.connection在你目前的瀏覽器中是否存在、回報了什麼值,以及你暴露的其餘訊號集合。
常見問題
Network Information API 需要權限提示嗎?
不需要。在支援它的瀏覽器上,navigator.connection 及其屬性可被任何指令碼在頁面載入時讀取,不需要任何使用者手勢、對話框或授權——這一點和定位或攝影機存取不同。
網站能透過這個 API 拿到我確切的網速嗎?
不能,不夠精確。規範刻意對 downlink 和 rtt 做了四捨五入與分桶處理,effectiveType 也只回報四個粗粒度世代等級之一。你能拿到的只是一個粗略的連線檔次,而非達到測速工具精度的即時測量結果——要拿到那種精度,網站得真正傳輸資料並計時,就像 BrowserInsight 的網路測速所做的那樣。
為什麼 Firefox 和 Safari 不支援這個 API?
兩款瀏覽器都只是從未將它作為穩定特性上線;Firefox 曾在實驗旗標後面嘗試過早期版本,之後又移除了。如今的支援僅限於 Chromium 系瀏覽器——包括 Chrome、Edge、Opera 和三星瀏覽器——caniuse.com 對此也有明確記錄。
我能用瀏覽器擴充功能封鎖這個訊號嗎?
間接可以——一個能阻止 JavaScript 執行、或在頁面指令碼執行前剝離 navigator.connection 的擴充功能就能堵住它,但並沒有專門針對這一個 API 的、廣泛使用的獨立擴充功能,因為相比 Canvas、WebGL 和字型訊號,它的貢獻本來就屬於次要的。改用 Firefox 或 Safari 則無需任何擴充功能即可徹底移除這一訊號。
總結
Network Information API 很好地示範了一種設計上就偏小、卻依然值得理解的指紋訊號。它的作者顯然預見到了這個風險,並對數值做了分桶處理來削弱它,所以單靠 navigator.connection 無法識別出你。它真正增加的是一層疊加在更大綜合指紋之上的粗粒度跨情境穩定性線索——同樣重要的是,它還是一道免費、難以偽造的瀏覽器引擎檢測手段,因為只有 Chromium 才完整實作了它。這兩點都不需要專門的防禦手段:它基本上會順帶被你為管理瀏覽器指紋其餘部分所做的一切一併涵蓋。
推薦閱讀:


