DNT 請求頭曾讓瀏覽器告訴網站別追蹤我,但幾乎沒有網站遵守。了解其原理、失敗原因,以及更具法律效力的繼任者 GPC。
有幾年時間,大多數瀏覽器都內建了一個看似簡單的選項:告訴網站別追蹤我,網站就會照做。這就是 Do Not Track(DNT,請勿追蹤)——一個單一的 HTTP 請求頭,搭配一個對應的 JavaScript 屬性 navigator.doNotTrack。它背後從未有任何技術強制力:唯有接收方網站自願遵守,它才有效。幾乎沒有網站這樣做,到了 2020 年代中期,各大主流瀏覽器都已移除了這項設定。它的繼任者**全域隱私控制(Global Privacy Control,GPC)**建立在同樣的單位元信號之上,但在越來越多司法管轄區,它有真正的法律作為後盾。
核心要點
- DNT 是一個自願性的 HTTP 請求頭(
DNT: 1),外加一個 JavaScript 屬性navigator.doNotTrack——這是一種請求,而非強制執行機制。 - 將 DNT 正式化的 W3C Tracking Preference Expression 規範在 2019 年被放棄,從未完成標準化。
- 網站沒有遵守 DNT 的法律義務,廣告技術產業與出版商的採用率始終微乎其微,蘋果、Google、Mozilla 此後都已移除或棄用了瀏覽器中的這項設定。
- 開啟 DNT 反而會讓你更容易被識別,而非更難:正因為極少使用者開啟它,它為你的指紋又添加了一位元的熵。
- 全域隱私控制(GPC)沿用了同樣的請求頭/信號理念,但在加州 CCPA/CPRA 等法律下被承認為有效的選擇退出請求,這賦予了它 DNT 從未擁有過的法律效力。
DNT 請求頭究竟是什麼
Do Not Track 在兩個相互映射的層面運作。在傳輸層面,開啟該設定的瀏覽器會在每次 HTTP 請求中發送一個請求頭:
DNT: 1
值為 0 明確表示「你可以追蹤我」,而完全不帶這個請求頭則表示「未表達偏好」。在用戶端層面,同樣的狀態也會暴露給 JavaScript,頁面無需檢查請求頭即可讀取:
console.log(navigator.doNotTrack); // "1"、"0" 或 null,取決於瀏覽器/設定
這就是這套機制的全部。沒有任何加密證明,沒有伺服器端校驗,網站讀取到 DNT: 1 卻置之不理也不會有任何後果。按照設計,DNT 只是疊加在普通 HTTP 請求頭之上的一句禮貌請求——它是否有效,完全取決於接收網站是否自願配合。
navigator.doNotTrack 與請求頭,以及一段簡史
請求頭和 JavaScript 屬性本應保持同步,但各瀏覽器在回傳值與預設狀態上並未統一,這讓開發者做特性偵測時頗為頭疼。Firefox 曾一度回傳 "yes"/"no"/"unspecified",後來才逐漸靠攏其他瀏覽器採用的 "1"/"0"/null 慣例。
大致時間軸如下:
- 2009 年——研究人員與隱私倡議者提出了「Do Not Track」HTTP 請求頭的構想,大致仿照美國聯邦貿易委員會的「Do Not Call」電話禁撥名單。
- 2011 年——Firefox 率先內建了 DNT 開關;Internet Explorer、Safari 和 Chrome 隨後幾年陸續跟進。
- 2011–2019 年——W3C 的 Tracking Protection 工作小組試圖將其語意與合規規範標準化,但廣告產業成員與隱私倡議者始終未能就「合規」的定義達成共識。
- 2019 年——W3C 正式關閉該工作小組;Tracking Preference Expression 規範始終未能超越「候選推薦」階段。
- 2020 年代——蘋果在 2019 年移除了 Safari 中的 DNT 設定(稱其存在被用作指紋信號的風險),其他瀏覽器也陸續跟進,或悄悄將其從設定介面中隱去,儘管
navigator.doNotTrack出於相容性大多仍然存在。
為何網站選擇無視它
DNT 要求網站改變攸關商業核心的行為——停止追蹤、停止建立廣告輪廓——卻沒有任何強制力,只能寄望於對方的善意。少數出版商與分析服務商確實遵守了,但廣告技術產業整體並未如此,也沒有任何法律要求它們這樣做。標準化工作陷入停滯也是同樣的原因:工作小組需要就「追蹤」到底意味著什麼、怎樣的回應才算合規達成共識,而廣告商在商業上有充分動機去抵制嚴格的定義。一個沒有任何違反成本的自願選擇退出機制,面向的又是一個營收模式高度依賴追蹤的產業,注定無法獲得有意義的採用。技術概念、瀏覽器實際支援與法律強制力之間的這種錯位,才是 DNT 真正走向消亡的原因——問題不在於請求頭本身缺了什麼功能。
指紋識別的悖論
這正是讓 DNT 與指紋識別話題產生關聯的轉折點:開啟它反而可能讓你更容易被單獨識別出來。 任何大多數使用者保持預設值的信號,一旦有一小群人偏離預設值,就會增加熵值。正因為極少有使用者真正開啟 DNT,DNT: 1(或 navigator.doNotTrack === "1")反而成了一個罕見、具區分度的數值,而非匿名化的手段——它只是指紋識別腳本可以納入組合識別碼的又一項屬性,與你的 User-Agent Client Hints、canvas 輸出、已安裝字型並列。一項只有一小撮自我選擇的少數人會開啟的隱私設定,恰恰與自己的目標背道而馳:一個信號越罕見,就越能縮小「你是誰」的範圍。這正是我們在瀏覽器指紋完整指南中提到的同一條熵原理——真正讓指紋發揮作用的是唯一性,而非任何單一位元的內容。
全域隱私控制(GPC):DNT 具有法律效力的繼任者
GPC 沿用了與 DNT 相同的形態——瀏覽器發送一個輕量信號(一個 HTTP 請求頭 Sec-GPC: 1,外加對應的 JavaScript 屬性 navigator.globalPrivacyControl)——但改變的是它背後的支撐。在 W3C Privacy Community Group 主導下開發的 GPC 規範,從一開始就被設計為對接加州 CCPA/CPRA 等法律所創設的「禁止出售或共享我的個人資訊」選擇退出權。在這些法律適用的司法管轄區,網站收到 Sec-GPC: 1 後就負有法律義務,必須將其視為有效的選擇退出請求——同樣是 DNT 曾發送過的那一位元信號,如今卻附帶了對無視者的監管後果。
這種法律支撐正是全部的差異所在。GPC 並不需要什麼新的追蹤偵測技術或更聰明的協定;它需要的只是某個司法管轄區願意宣布:一個瀏覽器信號可以算作一項可強制執行的消費者請求。包括 Brave、DuckDuckGo 和 EFF 的 Privacy Badger 在內的多款瀏覽器與隱私擴充功能,都預設啟用 GPC 或提供一鍵開關——這本身就是從 DNT 的失敗中得出的教訓:一個預設關閉、需要主動開啟、幾乎無人啟用的信號,不管有沒有法律撐腰,實際影響力都十分有限。
如何檢查你的瀏覽器是否已啟用 GPC
console.log(navigator.globalPrivacyControl); // 若 GPC 已啟用並正在發送,則回傳 true
如果回傳 true,代表你的瀏覽器正在向外發送 Sec-GPC: 1。並非所有瀏覽器都已支援這個屬性或請求頭,因此 undefined 並不必然代表你正被追蹤——它也可能只是說明該瀏覽器尚未實作 GPC。
常見問題
瀏覽器還支援 Do Not Track 嗎?
出於向後相容,navigator.doNotTrack 屬性在大多數瀏覽器中依然存在,但面向使用者的設定項已在 Safari 中被移除或隱藏,Chrome 與 Firefox 也不再將其宣傳為有意義的隱私控制手段。即便技術上仍然存在,也應預期絕大多數網站會無視它。
GPC 真的比 DNT 更有效嗎?
從法律角度看,在承認它的司法管轄區確實如此——在加州 CCPA/CPRA 等法律下,GPC 被視為有效的選擇退出請求,這意味著受規範企業如果無視它將面臨真正的合規責任。從技術角度看,它與 DNT 是同一類輕量信號;差異完全在於背後的強制執行機制,而非協定本身。
我該開啟 DNT 或 GPC 來減少瀏覽器指紋嗎?
在瀏覽器支援的情況下開啟 GPC 值得一做,因為它在受規範的司法管轄區具有法律層面的選擇退出效果,但無論 DNT 還是 GPC 都不會縮小你的指紋——兩者都只是為任何偵測它們的腳本又添加了一位元可區分資訊。如果你的目標是專門縮小指紋面,處理 canvas、WebGL、字型與音訊信號才更為關鍵;完整內容請參閱我們的瀏覽器指紋指南。
蘋果為何要從 Safari 中移除 DNT 開關?
蘋果在 2019 年表示,由於極少有使用者會更改這項預設設定,DNT 反而變成了一種可用於識別與追蹤使用者的手段——恰與其初衷相悖——因此蘋果決定從 Safari 中移除該開關介面。
測試你的瀏覽器發送了什麼
你可以直接在瀏覽器主控台中透過 navigator.doNotTrack 和 navigator.globalPrivacyControl 檢查自己的 DNT 和 GPC 信號。BrowserInsight 的指紋檢測工具會連同其餘指紋信號一併展示這些值,而我們的隱私工具比較則介紹了 VPN、代理與 Tor 這些針對 IP 層追蹤的方案——這類以請求頭為基礎的信號(無論 DNT 還是 GPC)從一開始就從未觸及 IP 層追蹤。

