标识符¶
Firefox 健康报告记录一些标识符以跟踪客户端和上传的文档。
标识符类型¶
文档/上传 ID¶
当 FHR 客户端创建或上传新文档时,会生成一个称为文档 ID 或上传 ID 的随机 UUID。
当客户端生成新的文档 ID 时,它们会在上传尝试之前将此 ID 持久保存到磁盘。
作为上传的一部分,客户端将所有旧的文档 ID 发送到服务器,并要求服务器删除它们。在行为良好的客户端中,服务器为每个客户端保留一条记录,其中包含随机变化的文档 ID。
客户端 ID¶
客户端 ID 是一个尝试唯一标识单个 FHR 客户端的标识符。请注意上一句中尝试的强调:客户端 ID 不保证唯一性。
客户端 ID 在客户端首次运行或根据需要时生成。
客户端 ID 作为每次上传的一部分传输到服务器。因此,服务器能够将多个文档上传与单个客户端 ID 关联起来。
客户端 ID 版本¶
生成客户端 ID 的语义是版本化的。
- 版本 1
客户端 ID 是一个随机生成的 UUID。
标识符的历史¶
最初,只有文档 ID。当时的思路是客户端会自行清理,并在服务器上最多保留 1 个活动文档。
不幸的是,这并没有奏效。通过蛮力分析对服务器上的记录进行重复数据删除,出现了一些有趣的模式。
- 孤立
客户端会在不删除旧有效负载的情况下上传新的有效负载。
- 差异记录
记录在某个日期之前共享数据,然后数据几乎完全发生分歧。这似乎表明配置文件被复制了。
- 回滚
记录在某个日期之前共享数据。此集合中的每个记录都包含一两天内的数据,但没有额外的数据。这可以用客户端上的文件系统回滚来解释。
服务器上的很大一部分记录属于行为不当的客户端。识别这些记录需要极大的资源和容易出错。这些记录正在破坏使用 Firefox 健康报告数据的能力。
因此,客户端 ID 诞生了。客户端 ID 的目的是唯一标识客户端,以便过去所需的极端努力和重复数据删除服务器数据的可靠性存疑的问题将成为过去。
客户端 ID 最初是随机生成的 UUID(版本 1)。这允许检测孤立和回滚。但是,如果复制了配置文件,则这些版本 1 的客户端 ID 仍然容易在多个配置文件和机器上使用。