”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Chrome、Safari 和 Firefox 中的用户代理减少

Chrome、Safari 和 Firefox 中的用户代理减少

发布于2024-08-06
浏览:747

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
  • 之后: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]删除
最新教程 更多>
  • 我可以在CSS中使用SVG作为伪元素吗?
    我可以在CSS中使用SVG作为伪元素吗?
    使用svgs用作pseudo-element content css content properts允许在使用元素之前或之后使用元素插入各种类型的内容伪元素,例如::之前和::之后。但是,对可以包括哪些内容有限制。可以将svgs用作pseudo-element Content?,现在可以使用s...
    编程 发布于2025-02-06
  • HTML格式标签
    HTML格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2025-02-06
  • 如何从PHP服务器发送文件?
    如何从PHP服务器发送文件?
    将文件发送到user
    编程 发布于2025-02-06
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 // error:“ coss redeclare foo()” 但是,php工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地...
    编程 发布于2025-02-06
  • 您什么时候需要取消多层指针?
    您什么时候需要取消多层指针?
    使用多个级别的指针是有道理的: 在面向对象的编程上下文中,可以使用三重指针来表示复杂的指针层次结构。例如,考虑以下C类结构:类A { 民众: char *b; }; B级{ 民众: char *c; }; 在这里,A对象包含一个指向B对象的指针,而B对象包含指向char的指针。要从...
    编程 发布于2025-02-06
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    Exploiting Regular ExpressionsA more efficient solution involves leveraging regular expressions.正则表达式允许您定义复杂的搜索模式并在单个操作中执行文本转换。示例示例usage 接下来,您可以使用匹配器...
    编程 发布于2025-02-06
  • 为什么我的nvarchar(最大)值将SQL Server 2005中的4000个字符截断为4000个字符?
    为什么我的nvarchar(最大)值将SQL Server 2005中的4000个字符截断为4000个字符?
    convenation crocess 在提供的代码中,字符串是通过对一系列常量和一系列常数和一系列常数和变量均小于4000个字符。在被分配到 @sql1之前,串联的字符串仍被视为较小字符串的集合。 数据类型preceDence [&& && &&&&&&&&&&&&&&&&&&&&&&&...
    编程 发布于2025-02-06
  • 为什么在JDBC Connections中使用class.forname(“ oracle.jdbc.oracledriver”)?
    为什么在JDBC Connections中使用class.forname(“ oracle.jdbc.oracledriver”)?
    class.forname(“ oracle.jdbc.driver.oracledriver”)在jdbc connections中的目的是什么?使用Java,class.forname(“ oracle.jdbc.driver.oracledriver”)命令扮演至关重要的角色。 的目的是确...
    编程 发布于2025-02-06
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    插入记录时如何解决“一般错误:2006 MySQL 服务器已消失”介绍:将数据插入 MySQL 数据库有时会导致错误“一般错误:2006 MySQL 服务器已消失”。当与服务器的连接丢失时会出现此错误,通常是由于 MySQL 配置中的两个变量之一所致。解决方案:解决此错误的关键是调整wait_tim...
    编程 发布于2025-02-06
  • 在网络开发中保持领先地位:最新新闻,工具和见解#49
    在网络开发中保持领先地位:最新新闻,工具和见解#49
    ?阅读! 创始人模式:一般假设:一家初创公司的管理正在向经理模式变化 - 经理模式 - 在商学院管理和教授的众所周知的方式。 Founder mode is less known and understood, but may be more effective. / start...
    编程 发布于2025-02-06
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    在尝试将image存储在mysql数据库中时,您可能会遇到一个可能会遇到问题。本指南将提供成功存储您的图像数据的解决方案。 easudy values('$ this-> image_id','file_get_contents($ tmp_image)...
    编程 发布于2025-02-06
  • 我应该在使用块内明确关闭SQLConnection吗?
    我应该在使用块内明确关闭SQLConnection吗?
    答案在于使用关键字的行为。退出使用块时,在包含的对象上调用.dispose()方法。对于sqlConnection,.dispose()自动关闭连接并发布任何关联的资源。 ]使用cn作为new System.data.sqlclient.sqlConnection() CN.OPEN ...
    编程 发布于2025-02-06
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    [2明确担心Microsoft Visual C(MSVC)在正确实现两相模板实例化方面努力努力。该机制的哪些具体方面无法按预期运行?背景:说明:的初始Syntax检查在范围中受到限制。它未能检查是否存在声明名称的存在,导致名称缺乏正确的声明时会导致编译问题。为了说明这一点,请考虑以下示例:一个符合...
    编程 发布于2025-02-06
  • 如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    如何从Python中的字符串中删除表情符号:固定常见错误的初学者指南?
    从python 导入编解码器 导入 text = codecs.decode('这狗\ u0001f602'.encode('utf-8'),'utf-8') 印刷(文字)#带有表情符号 emoji_pattern = re.compile(“ [”...
    编程 发布于2025-02-06
  • 在Sqlalchemy中过滤布尔值时,如何处理Flake8警告?
    在Sqlalchemy中过滤布尔值时,如何处理Flake8警告?
    避免使用sqlalchemy滤波器中布尔比较的flake8警告在使用sqlalchemy时,在过滤器条款中使用布尔比较通常是通常的。但是,Flake8在使用“ ==”操作员进行布尔比较时可能会引起警告。 sqlalchemy filter行为,但是,在sqlalchemy filter子句中,“ ...
    编程 发布于2025-02-06

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3