本地数据库

本文档适用于以下方法:Update API

数据库设置

使用 Update API 的客户端必须设置本地数据库并首次下载要使用的网络风险列表。要详细了解如何执行首次提取,请参阅下面的完整更新部分。

数据库更新

为了确保能够抵御最新的威胁,我们强烈建议客户端使用 threatLists.computeDiff 方法定期更新其本地 Web Risk 列表。

threatLists.computeDiff 请求指定要更新的列表。如果客户端存在内存或带宽限制,他们还可以使用请求来设置更新限制条件(请参阅更新限制条件)。

threatLists.computeDiff response 会对每个列表返回完整更新或部分更新,如下所述。

完整更新

当客户端将 threatLists.computeDiff 请求中的 versionToken 字段留空或服务器确定需要完整更新时,将返回完整更新。对于完整更新,仅返回添加的内容。客户端应先清除本地数据库,然后再应用更新并执行验证检查

空白状态

当客户端为列表发送初始请求时,将返回完整更新。在这种情况下,请求中的 versionToken 字段将留空(因为没有要提供的值),响应中的 newVersionToken 字段将返回本地列表的初始状态。当客户端在后续请求中故意将 versionToken 字段留空时,也会返回完整更新。这将强制执行完全更新并在响应的 newVersionToken 字段中返回新状态。

服务器决策

有时,当客户端仅请求部分更新时,Web Risk 服务器会返回完整更新。当客户端最初下载列表的小版本,然后更新到列表的较大版本时,可能会发生这种情况;服务器会仅返回整个列表的完整更新。如果客户端长时间未下载数据并请求部分更新,也会发生这种情况;同样,服务器将仅返回整个列表的完整更新。

部分更新

当客户端为 threatLists.computeDiff 请求中的 versionToken 字段提供值时,会返回部分更新(如上文所述,例外情况是服务器确定需要完整更新)。对于部分更新,将同时返回添加删除。客户端更新本地数据库中的列表(在添加之前应用移除),然后执行验证检查

添加项

添加项是应添加到本地数据库的 SHA256 哈希前缀。大多数哈希前缀的长度为 4 个字节,但一些哈希前缀的长度可以在 4 到 32 个字节之间。因此,可能会返回多组添加集;例如,一个包含 4 个字节的前缀,另一个包含 5 个字节的前缀。

如果客户端支持压缩,则可以使用 Rice 压缩来压缩响应。但是,只有 4 个字节的哈希前缀会被压缩。较长的哈希前缀一直以未压缩的原始格式发送。如需了解详情,请参阅压缩

删除项

删除项是按字典顺序排序的客户端数据库中从零开始的索引,指向应从本地数据库中删除的条目。仅返回一组删除项。

如果客户端支持压缩,则返回“Rice 哈希值”和“Rice 索引”。如果不支持压缩,则返回“原始哈希值”和“原始索引”。如需了解详情,请参阅Compression/web-risk/docs/compression).

验证检查

当返回 threatLists.computeDiff 响应时;可以是完整更新,也可以使部分更新;期望客户端执行验证检查。

客户端首先更新本地数据库中的列表(在添加之前应用移除)。然后,客户端会计算(按字典顺序排序)本地列表的 SHA256 哈希值,并将其与响应中返回的校验和进行比较。如果两个值相同,则 Web Risk 列表会被视为“正确”。

如果这两个值不相等,则 Web Risk 列表会被视为“损坏”。客户端必须从数据库中清除列表,并在 versionToken 字段设置为空字符串时重新发布第二次更新;这将强制执行完整更新并返回全新的列表和状态。