【问题标题】:AMP update-cache resulting in 404 or 410 error from originAMP 更新缓存导致来自源的 404 或 410 错误
【发布时间】:2020-02-11 18:51:16
【问题描述】:

几天来,我一直在尝试更新我网站上的 AMP 缓存页面,但无济于事。

虽然存在更新缓存的文档,但它可能是由 Google 工程师编写的,因此不是最容易阅读的。

https://developers.google.com/amp/cache/update-cache

我已尽我所能按照指示进行操作。 我创建了一个私钥和公钥。创建了一个 signature.bin 并使用 Google 自己的文档中的过程对其进行了验证。

~$ openssl dgst -sha256 -signature signature.bin -verify public-key.pem url.txt

验证正常

public-key.pem 已重命名为 apikey.pub 并上传到以下目录:

https://irecover.ca/.well-known/amphtml/apikey.pub

为了验证复制没有问题,我使用以下方法检查了签名:

$ openssl dgst -sha256 -signature signature.bin -verify https://irecover.ca/.well-known/amphtml/apikey.pub) url.txt

% Total % Received % Xferd 平均速度 时间 时间 时间 当前

Dload 上传总花费的左速度

100 450 100 450 0 0 2653 0 --:--:-- --:--:-- --:--:-- 2662

验证正常

现在我将签名文件转换为 base64 并将 / 替换为 _ 并将 + 替换为 -

猫签名.bin | base64 > 签名.b64

sed 's///_/g' 签名.b64 > 签名.b64a

sed 's/+/-/g' 签名.b64a > 签名.b64b

sed 's/=//g' 签名.b64b > 签名.b64c

猫签名.b64c | tr -d '\n' > 签名.b64

我制作了一个脚本,为我制作更新缓存 url。它还在那个时刻创建了一个时间戳并将其用于 amp_ts 变量(因此 amp_ts 永远不会超过 1 秒)。然后我将它附加到查询的末尾,该查询即将被我制作的脚本卷曲,所以它看起来像这样:

https://irecover-ca.cdn.ampproject.org/update-cache/c/s/irecover.ca/article?amp_action=flush&amp_ts=1581446499&amp_url_signature=KDaKbX0AbVbllwkTpDMFPOsFCRNw2sbk6Vd552bbG3u5QrecEmQ1SoMzmMR7iSXinO7LfM2bRCgJ1aD4y2cCayzrQuICrGz6b_PH7gKpo6tqETz06WmVeiP89xh_pBOu-pyN5rRHf0Pbu8oRkD2lRqgnGrLXDfIrFTTMRmHlO0bsa8GknyXL8RNXxk9ZQaufXAz-UJpoKaZBvT6hJWREAzxoZ-rGnDPVaC3nlBCu3yPorFcTbbr0CBz2svbfGgAYLQl54lLQmUpxI8661AEe1rdOLqAyLIUb4ZiSbO65-PmIkdZWVPFHMdbpSv4GMNdvodleCWBfMAcG2C09v-LR6g

但是,这始终会导致来自 google 的相同错误代码。

由于摄取错误导致的无效公钥:来自来源的 404 或 410 错误

有人知道我做错了什么吗?

【问题讨论】:

  • 他们要求在您提供的文档的“指南”部分中提供内容类型为“text/plain”的密钥。也许出于某种原因这对他们很重要。您提供没有内容类型的密钥。您可以在浏览器的网络面板中查看此项。
  • @JamesGray 更改内容类型对您有帮助吗?我和网上的许多其他人似乎都在为这个话题而苦苦挣扎。就我而言,至少我已经设置了内容类型
  • 您好,解决了吗?我也对缓存更新感到困惑,并从通过 amphtml repo 报告的错误中得到了一个好主意,这里是链接 - github.com/ampproject/amphtml/issues/20959

标签: caching amp-html


【解决方案1】:

检查 apikey.pub 可访问性的几件事:

  1. /.well-known/amphtml/apikey.pub 文件可供移动和桌面用户代理访问(例如,非移动设备无法重定向,因为 AMP 缓存客户端可能会重定向)

  2. robots.txt 中不排除公钥,例如:

    User-agent: *
    Allow: /.well-known/amphtml/apikey.pub
  1. 公钥响应具有预期的标头(例如 content-type:text/plain):
    curl -I https://amp.example.com/.well-known/amphtml/apikey.pub
    
    HTTP/2 200 
    date: Sun, 26 Jul 2020 23:48:55 GMT
    content-type: text/plain
    vary: Accept-Encoding
    etag: W/"1c3-173478a8840"
    last-modified: Sun, 26 Jul 2020 23:48:55 GMT

有了这些东西,我从更新/缓存端点得到“OK”成功响应

【讨论】:

    猜你喜欢
    • 2018-09-16
    • 1970-01-01
    • 2014-01-04
    • 2013-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-09
    相关资源
    最近更新 更多