使用 update-cache
请求更新和移除 Google AMP Cache 中的内容。
目前,update-cache
只能确保更新内容不超过其 max-age(这意味着要将资源视为最新状态的最长时间)。
update-cache
请求要求网域所有者使用 RSA 密钥为请求签名,并从源网域上的标准网址传送匹配的公钥。
您可以通过向 AMP Cache 发出签名请求来刷新文档的任何当前缓存版本。系统会通过此地址调用 update-cache
请求:
https://example-com.<cache.updateCacheApiDomainSuffix>/update-cache/c/s/example.com/article?amp_action=flush&_ts=<ts_val>&_url_signature=<sig_val>
参数
update-cache
请求需要以下参数和值:
参数 | |
---|---|
example-com 和 example.com
|
必需 根据 AMP 缓存网址格式中指定的格式指定的域名。 |
<cache.updateCacheApiDomainSuffix>
|
必需 AMP Cache 的域名。如需了解详情,请参阅调用update-cache 请求。
|
amp_ts=<ts_val>
|
必需 此参数表示 UNIX 纪元时间戳,用于防范重放攻击。该值必须是当前时间(以秒为单位),必须在当前时间之前或之后的 1 分钟内。 |
amp_url_signature=<sig_val>
|
必需 此参数表示整个请求路径的 RSA 签名(请参阅生成 RSA 密钥),包括amp_action 和 amp_ts ,但不包括签名本身。
|
指南
您必须遵循 update-cache
指南:
- AMP Cache 主机名 (cdn.ampproject.org) 已从签名中排除,以允许向多个 AMP Cache 运算符提交相同的签名请求。
- 对于签名验证,您必须在 AMP 文档网域内的固定位置提供 RSA 公钥(要生成密钥,请参阅生成 RSA 密钥)。例如:
https://example.com/.well-known/amphtml/apikey.pub
- 公钥不得被 robots.txt 禁止。
- 网址必须采用 HTTPS 格式。
- 该网域必须是要更新的网域,而不是子网域或超级用户网域。
- 您必须以 PEM 格式发布密钥,并使用内容类型“text/plain”提供该密钥。
- 无论文档通过任何 rel=canonical 标记指定的网域如何,AMP Cache 始终都会从请求的同一网域中提取公钥。如果源网域在要刷新的位置提供 HTTP 重定向,则系统只会从缓存中清除请求的路径,而不会刷新重定向的目标。
更新或移除内容
从来源中移除内容后,您可以使用 update-cache
从 Google AMP Cache 中更新或永久移除该内容。如需更新或移除内容,请按以下步骤操作:
- 提取以下文件:
https://cdn.ampproject.org/caches.json
- 遍历 JSON 文件的
caches
条目中的条目。 - 选择您要支持的
caches
。 - 使用每个
cache
条目中的updateCacheApiDomainSuffix
调用update-cache
请求。 - 请使用以下格式构建网址:
https://example-com.<cache.updateCacheApiDomainSuffix>/update-cache/c/s/example.com/article?amp_action=flush&_ts=<ts_val>&_url_signature=<sig_val>
生成 RSA 密钥
OpenSSL 项目提供了用于生成和管理非对称 RSA 密钥的命令行工具。您还可以通过 OpenSSL 库或等效的加密 API(节点加密、NSS 或 GnuTLS)生成 RSA 密钥并以编程方式进行管理。
- 生成一对 RSA 密钥,采用文本 PEM 格式,如下所示:
openssl genrsa 2048 > private-key.pem openssl rsa -in private-key.pem -pubout >public-key.pem
- 将网域的公钥发布在以下位置以进行刷新:
https://example.com/.well-known/amphtml/apikey.pub
网址必须采用 HTTPS 格式。该密钥必须可由匿名用户公开访问。
- 使用私钥为
update-cache
请求签名。例如:echo -n > url.txt "/update-cache/c/s/example.com/article?amp_action=flush&_ts=$(date +%s)" && cat url.txt | openssl dgst -sha256 -sign private-key.pem > signature.bin
signature.bin 的输出是 RSA 二进制签名。
- 使用公钥验证签名:
openssl dgst -sha256 -signature signature.bin -verify public-key.pem url.txt
- 使用 base64 的网页安全变体对二进制 RSA 签名进行编码:
cat signature.bin | base64 -w0 | tr '/+' '_-' | tr -d '=' > base64.txt
- 使用
amp_url_signature
查询参数将 base64 编码的 RSA 签名附加到网址。echo "$(cat url.txt)&_url_signature=$(cat base64.txt)"
更新 RSA 密钥
如果您想更新 RSA 密钥,可以通过 AMP Cache 链接访问 RSA 密钥,Google 可能会在几小时内抓取您的新 RSA 密钥。以下是 AMP Cache 链接:
https://example-com.<cache.updateCacheApiDomainSuffix>/r/s/example.com/.well-known/amphtml/apikey.pub