1. 受众
本文件面向以下对象:
-
技术文档作者,希望在自己的规范或文档中复用或引用这些概念。
-
用户代理开发者,希望让实现方案符合以用户为优先的设计与隐私原则。
-
Web开发者,希望理解为何用户代理优先考虑用户隐私和安全,而不是开发者便利或其他利益相关方。
-
监管者和决策者,希望了解用户代理行为的职责、原则和预期。
2. 什么是网页用户代理
网页用户代理 是代表其用户与网站交互的任何软件实体, 包含仅仅渲染网站内容在内, 操作范围超出了实体自身。 在Web规范及本文档的其余部分, 网页用户代理通常简称为“用户代理”, 但在其它领域也存在其它类型的用户代理, 例如在电子邮件场景中的“邮件用户代理”。 一个人在日常生活中可以使用多种不同的用户代理。
最常见的网页用户代理是Web浏览器, 包括能够跟踪跨站点链接的应用内浏览器。 但用户代理还包括 如搜索引擎、语音助手、生成式AI系统等其他工具, 这些工具能够呈现网页内容的片段或摘要, 或协助用户浏览和操作网站。
用户代理的行为并非完全由Web标准甚至通用技术规范限定。 尤其是, 用户代理会根据如何最好地服务其用户来选择实现哪些规范, 并在实施规范时开发专有的用户界面和其它行为。
2.1. 用户代理作为软件组件
作为软件组件,用户代理可以是更大型应用程序的一部分, 并且可以调用实现Web平台或其部分功能的库。
当一个应用明确区分哪些部分属于用户代理 ,哪些部分不属于时, 那么只有那些用户代理部分 ——即浏览代理自身以外内容的部分, 需要遵循用户代理职责。 明确只显示应用自身内容的部分可以自行操作, 但应用仍需 让用户对应用不同部分的预期行为有清晰的认识。 如果内部与外部内容之间的区别不明显——例如 浏览外部内容时应用未显示地址栏或其他来源指示器—— 那么 应用在显示自身内容时也应遵循用户代理职责。
类似地,实现Web平台的库
可能并非完整的用户代理。
某些库,如
SFSafariViewController
和
Android Custom Tabs
承担了实现用户代理职责的责任,
并明确区分所浏览的外部内容与嵌入应用所控制的内容。
这些库属于用户代理。
其他库,如 Android、 iOS、 以及 Windows 的 WebView 库, 被设计用于支持多种不同类型的应用。 因为其中一些应用只包含自己的内容, WebView 库本身并不是用户代理, 也不实现用户代理职责。
最终,如果嵌入式应用或其任何部分作为用户代理运作,则该应用需遵守用户代理职责。 如果应用仅通过用户代理库浏览外部内容,这会很直接。 开发者在使用非用户代理的WebView实现应用内浏览器时, 更应格外注意遵循用户代理职责。
3. 用户代理的职责
每个用户代理服务于其用户(互联网属于终端用户), 而不是服务于其他利益相关方。 用户代理对其用户负有各种 职责, 这些职责应通过集体讨论确立, 并体现在用户代理实现的各类标准中。
3.1. 保护
访问网页应该是安全的。 仅仅访问网页本身, 不应允许该网页更改用户计算机或环境, 比如安装软件或访问硬件。
向站点或其他观察者暴露的任何数据 都应与用户偏好一致, 遵循数据最小化原则。 尤其是,用户代理必须采取行动 限制站点追踪用户活动的可能性 [unsanctioned-tracking]。
用户可以选择共享更多信息, 比如填写表单或授予权限。 即便如此,用户代理也必须帮助用户防止受骗,并 清晰地提示当网页试图获取更高权限时。
访问本地文件或其他敏感资源 必须限制在明确、主动的用户操作范围内,且应有适当的警告。
用户代理需要防止站点上的恶意代码 越过用户代理本身 修改用户计算机或访问其他源。 用户代理通过对组件沙盒隔离、 使用内存安全语言、 并配备安全团队响应漏洞来履行这一保护职责。 这些防护措施需要不断进化以应对新威胁。
用户代理应防止页面访问本地文件, 除非用户明确选择或打开文件。 为此,通常采取如下措施:
-
为每个
file:URL分配独立的源, -
从
<input type=file>上传表单中移除路径信息, -
限制@font-face规则可用的本地字体。
但用户依然可以选择共享文件, 如上传或下载。 File System Access 这样的API不违背此职责, 前提是用户有能力做出明智决定。
3.2. 诚信
用户代理有责任向用户解释正在发生的操作, 并使用用户能够理解的方式表达。 这些解释应在合适的时机和频率下给出, 以真正帮助用户理解, 而不是干扰或打扰用户。
3.3. 忠诚
用户代理必须将用户权益置于实现者和其他任何方利益之上。
用户代理在收取合理报酬,且事先获得用户同意的前提下, 也可以保持忠诚。
用户代理还可以帮助用户 对网页做出可信承诺以获得对方服务, 获得服务后继续履行承诺也并不构成不忠。
用户代理不得阻碍用户切换至其他用户代理。 例如,不得阻拦、限制或以无法移植的方式存储、导出用户数据。 这包括身份信息、书签、历史记录、密码、以及诸如通行密钥等凭据。 如果用户代理依赖底层操作系统存储凭据, 就需要为用户提供授权方式让其他用户代理访问这些凭据。