」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Chrome、Safari 和 Firefox 中的用戶代理程式減少

Chrome、Safari 和 Firefox 中的用戶代理程式減少

發佈於2024-08-06
瀏覽:952

User Agent Reduction in Chrome, Safari & Firefox

簡介:什麼是用戶代理減少和客戶端提示?

近年來,隱私問題推動瀏覽器處理使用者代理字串的方式發生重大變化。傳統上用於識別瀏覽器和裝置資訊的使用者代理字串已被減少以限制共享的資訊量,從而保護使用者隱私。為了解決減少用戶代理的局限性,客戶端提示作為一種解決方案應運而生,提供了一種更受控且尊重隱私的方式來共享必要的資訊。

在此閱讀完整的部落格文章

用戶代理字串簡史

User-Agent 字串可以追溯到網頁瀏覽器的早期,從 Tim Berners-Lee 的 WorldWideWeb 開始。最初,它們很簡單,提供基本的瀏覽器和版本資訊。隨著時間的推移,它們逐漸演變為包含有關作業系統、裝置類型等的詳細數據,事實證明這對於網路分析和優化使用者體驗非常有用。然而,這項細節也啟用了設備指紋識別,引發了隱私問題。

什麼是用戶代理減少?

減少User-Agent旨在最大限度地減少User-Agent字串中的信息,以保護用戶隱私。減少了特定作業系統版本和硬體型號等高熵資訊。例如,Google 的 Chrome 現在報告不太詳細的用戶代理字串:

  • 之前:Mozilla/5.0(Linux;Android 13;Pixel 7)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/95.2.1.0 Mobile Safari/537.36 Safari
  • 之後:Mozilla/5.0(Linux;Android 10;K)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/95.0.0.0 Mobile Safari/537.36

類似地,Firefox 和 Safari 也實現了自己版本的用戶代理減少,儘管基於其獨特的策略略有不同。

客戶端提示如何發揮作用?

用戶端提示提供了一種以注重隱私的方式請求有關用戶設備和瀏覽器的特定高熵資訊的方法。存取客戶端提示有兩種主要方法:

  1. HTTP 請求標頭: 網站可以使用 HTTP 請求標頭請求有關使用者瀏覽器和裝置的特定資訊。這通常用於第一方環境,確保詳細的用戶資訊只能透過主網站訪問,而不能透過第三方資源訪問。
  2. JavaScript API: 用戶端提示也可以透過 JavaScript 中的 navigator.userAgentData 物件存取。這允許動態查詢特定信息,例如架構、模型和平台版本,而無需設置額外的標頭。

實施客戶端提示

使用 HTTP 請求標頭

要透過 HTTP 標頭實現客戶端提示,伺服器需要在 HTTP 回應中設定適當的標頭,向瀏覽器發出訊號以在將來的請求中包含這些提示。例如:

Accept-CH: Sec-CH-UA-Platform-Version

瀏覽器的後續請求將包含平台版本:

Sec-CH-UA-Platform-Version: "14.5.0"

使用 JavaScript API

對於動態應用程序,JavaScript API 提供了靈活性。例如,使用 getHighEntropyValues 方法:

if (navigator.userAgentData) {
    navigator.userAgentData.getHighEntropyValues(['architecture', 'model', 'platformVersion'])
        .then(ua => {
            console.log(ua);
        });
}

給開發者的建議

根據您的特定需求,您可以選擇不同的方式來收集使用者環境資料:

  • 特徵偵測:盡可能使用現有的瀏覽器JavaScript API。這比依賴用戶代理字串更可靠且面向未來。
  • 低熵信息: 對於設備類型等基本詳細信息,用戶代理字串可能仍然足夠。
  • 高熵資訊: 如果需要詳細資訊且您可以控制網域,請使用客戶端提示。

結論

用戶代理減少和客戶端提示代表了增強用戶隱私的重要步驟,同時仍允許網站收集必要的資訊以獲得最佳功能。透過理解和實施這些技術,開發人員可以平衡詳細使用者資料的需求與隱私和效能考量。

在我們詳細的部落格文章中了解更多。

版本聲明 本文轉載於:https://dev.to/corbado/user-agent-reduction-in-chrome-safari-firefox-3g6g?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 如何在保持鼠標輪和箭頭鑰匙滾動的同時隱藏滾動條?
    如何在保持鼠標輪和箭頭鑰匙滾動的同時隱藏滾動條?
    在通過鼠標輪和箭頭鍵啟用滾動時隱藏scrollbars A:要完成此操作,請按照以下步驟:使用CSSS屬性溢出:隱藏在目標div或身體上隱藏滾動條。 模仿鼠標輪滾動: javaScript或jquery。 在函數中,修改目標div的scrolltop屬性以仿真滾動。 : 綁定鍵盤事件(而不是...
    程式設計 發佈於2025-02-07
  • Java是否允許多種返回類型:仔細研究通用方法?
    Java是否允許多種返回類型:仔細研究通用方法?
    在java中的多個返回類型:一個誤解介紹,其中foo是自定義類。該方法聲明似乎擁有兩種返回類型:列表和E。但是,情況確實如此嗎? 通用方法:拆開神秘 [方法僅具有單一的返回類型。相反,它採用機制,如鑽石符號“ ”。 分解方法簽名: :本節定義了一個通用類型參數,E。它表示該方法接受了擴展foo類...
    程式設計 發佈於2025-02-07
  • 如何使用組在MySQL中旋轉數據?
    如何使用組在MySQL中旋轉數據?
    在關係數據庫中使用mysql組使用mysql組來調整查詢結果。在這裡,我們面對一個共同的挑戰:使用組的組將數據從基於行的基於列的基於列的轉換。通過子句以及條件匯總函數,例如總和或情況。讓我們考慮以下查詢: select d.data_timestamp, sum(data_id = 1 tata...
    程式設計 發佈於2025-02-07
  • 如何檢查對像是否具有Python中的特定屬性?
    如何檢查對像是否具有Python中的特定屬性?
    方法來確定對象屬性存在尋求一種方法來驗證對像中特定屬性的存在。考慮以下示例,其中嘗試訪問不確定屬性會引起錯誤: >>> a = someClass() >>> A.property Trackback(最近的最新電話): 文件“ ”,第1行, AttributeError:SomeClass實...
    程式設計 發佈於2025-02-07
  • 我可以在CSS中使用SVG作為偽元素嗎?
    我可以在CSS中使用SVG作為偽元素嗎?
    使用svgs用作pseudo-element content css content properts允許在使用元素之前或之後使用元素插入各種類型的內容偽元素,例如::之前和::之後。但是,對可以包括哪些內容有限制。 可以將svgs用作pseudo-element Content? ,現在可以使...
    程式設計 發佈於2025-02-07
  • 如何從PHP服務器發送文件?
    如何從PHP服務器發送文件?
    將文件發送到user
    程式設計 發佈於2025-02-07
  • 為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    為什麼儘管有效代碼,為什麼在PHP中捕獲輸入?
    [2 _post ['ss'];? > 的目的是從單擊提交按鈕時,文本框並顯示。但是,輸出保持空白。當方法=“ get”無縫工作時,方法=“ post”構成問題。 檢查action屬性:如果您正在刷新頁面,請將操作屬性設置為空字符串,例如] action ='&...
    程式設計 發佈於2025-02-07
  • 可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    可以在純CS中將多個粘性元素彼此堆疊在一起嗎?
    </main> <section> ,但无法使其正常工作,如您所见。任何洞察力都将不胜感激! display:grid; { position:sticky; top:1em; z-index:1 1 ; { { { pos...
    程式設計 發佈於2025-02-07
  • 'exec()
    'exec()
    Exec對本地變量的影響: exec function,python staple,用於動態代碼執行的python staple,提出一個有趣的Query:它可以在函數中更新局部變量嗎? python 3 Dialemma 在Python 3中,以下代碼shippet無法更新本地變量,因為人...
    程式設計 發佈於2025-02-07
  • 如何干淨地刪除匿名JavaScript事件處理程序?
    如何干淨地刪除匿名JavaScript事件處理程序?
    在這里工作/},false); 不幸的是,答案是否。除非在Creation中存儲對處理程序的引用。 要解決此問題,請考慮將事件處理程序存儲在中心位置,例如頁面的主要對象,請考慮將事件處理程序存儲在中心位置,否則無法清理匿名事件處理程序。 。這允許在需要時輕鬆迭代和清潔處理程序。
    程式設計 發佈於2025-02-07
  • 如何在整個HTML文檔中設計特定元素類型的第一個實例?
    如何在整個HTML文檔中設計特定元素類型的第一個實例?
    [2單獨使用CSS,整個HTML文檔可能是一個挑戰。 the:第一型偽級僅限於與其父元素中類型的第一個元素匹配。 以下CSS將使用添加的類樣式的第一個段落: }
    程式設計 發佈於2025-02-07
  • 如何在JavaScript對像中動態設置鍵?
    如何在JavaScript對像中動態設置鍵?
    如何為JavaScript對像變量創建動態鍵,嘗試為JavaScript對象創建動態鍵,使用此Syntax jsObj['key' i] = 'example' 1;將不起作用。正確的方法採用方括號:他們維持一個長度屬性,該屬性反映了數字屬性(索引)和一個數字屬性的數量。標準對像沒有模仿這...
    程式設計 發佈於2025-02-07
  • \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    \“(1)vs.(;;):編譯器優化是否消除了性能差異?\”
    使用(1)而不是(;;)會導致無限循環的性能差異? 現代編譯器,(1)和(;;)之間沒有性能差異。 是如何實現這些循環的技術分析在編譯器中: perl: S-> 7 8 unstack v-> 4 -e語法ok 在GCC中,兩者都循環到相同的彙編代碼中,如下所示:。 globl t_時 ...
    程式設計 發佈於2025-02-07
  • 如何使用PHP從XML文件中有效地檢索屬性值?
    如何使用PHP從XML文件中有效地檢索屬性值?
    從php 您的目標可能是檢索“ varnum”屬性值,其中提取數據的傳統方法可能會使您感到困惑。 - > attributes()為$ attributeName => $ attributeValue){ echo $ attributeName,'=“',$ a...
    程式設計 發佈於2025-02-07
  • 為什麼使用Firefox後退按鈕時JavaScript執行停止?
    為什麼使用Firefox後退按鈕時JavaScript執行停止?
    導航歷史記錄問題:JavaScript使用Firefox Back Back 此行為是由瀏覽器緩存JavaScript資源引起的。 To resolve this issue and ensure scripts execute on subsequent page visits, Firefox...
    程式設計 發佈於2025-02-07

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3