更新 AMP 内容

使用 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&amp_ts=<ts_val>&amp_url_signature=<sig_val>

参数

update-cache 请求需要以下参数和值:

参数
example-comexample.com

必需

根据 AMP 缓存网址格式中指定的格式指定的域名。
<cache.updateCacheApiDomainSuffix>

必需

AMP Cache 的域名。如需了解详情,请参阅调用 update-cache 请求
amp_ts=<ts_val>

必需

此参数表示 UNIX 纪元时间戳,用于防范重放攻击。该值必须是当前时间(以秒为单位),必须在当前时间之前或之后的 1 分钟内。
amp_url_signature=<sig_val>

必需

此参数表示整个请求路径的 RSA 签名(请参阅生成 RSA 密钥),包括 amp_actionamp_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 中更新或永久移除该内容。如需更新或移除内容,请按以下步骤操作:

  1. 提取以下文件:
    https://cdn.ampproject.org/caches.json
  2. 遍历 JSON 文件的 caches 条目中的条目。
  3. 选择您要支持的 caches
  4. 使用每个 cache 条目中的 updateCacheApiDomainSuffix 调用 update-cache 请求。
  5. 请使用以下格式构建网址:
    https://example-com.<cache.updateCacheApiDomainSuffix>/update-cache/c/s/example.com/article?amp_action=flush&amp_ts=<ts_val>&amp_url_signature=<sig_val>

生成 RSA 密钥

OpenSSL 项目提供了用于生成和管理非对称 RSA 密钥的命令行工具。您还可以通过 OpenSSL 库或等效的加密 API(节点加密、NSS 或 GnuTLS)生成 RSA 密钥并以编程方式进行管理。

  1. 生成一对 RSA 密钥,采用文本 PEM 格式,如下所示:
    openssl genrsa 2048 > private-key.pem
    openssl rsa -in private-key.pem -pubout >public-key.pem
  2. 将网域的公钥发布在以下位置以进行刷新:
    https://example.com/.well-known/amphtml/apikey.pub

    网址必须采用 HTTPS 格式。该密钥必须可由匿名用户公开访问。

  3. 使用私钥为 update-cache 请求签名。例如:
    echo -n > url.txt "/update-cache/c/s/example.com/article?amp_action=flush&amp_ts=$(date +%s)" && cat url.txt | openssl dgst -sha256 -sign private-key.pem > signature.bin

    signature.bin 的输出是 RSA 二进制签名。

  4. 使用公钥验证签名:
    openssl dgst -sha256 -signature signature.bin -verify public-key.pem url.txt
  5. 使用 base64 的网页安全变体对二进制 RSA 签名进行编码:
    cat signature.bin | base64 -w0 | tr '/+' '_-' | tr -d '=' > base64.txt
  6. 使用 amp_url_signature 查询参数将 base64 编码的 RSA 签名附加到网址。
    echo "$(cat url.txt)&amp_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