更新 AMP 內容

使用 update-cache 要求更新和移除 Google AMP 快取中的內容。 目前,update-cache 只會確保內容會在其 max-age 中更新,也就是系統會將資源視為最長的時間。

update-cache 要求網域擁有者必須使用 RSA 金鑰簽署要求,並透過原始網域的標準網址提供相符的公開金鑰。

您可以透過對 AMP 快取發出的已簽署要求來清除文件目前快取的所有版本。位於以下網址呼叫 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 快取的網域名稱。詳情請參閱呼叫 update-cache 要求一文。
amp_ts=<ts_val>

必要

這個參數代表 UNIX 紀元時間戳記,可用來防止重播攻擊。這個值應為目前時間 (以秒為單位),且該時間必須在目前時間的前後。
amp_url_signature=<sig_val>

必要

這項參數代表整個要求路徑的 RSA 簽名 (請參閱產生 RSA 金鑰),包括 amp_actionamp_ts,但排除簽名本身。

指南規範

請務必遵守 update-cache 規範:

  • AMP 快取主機名稱 (cdn.ampproject.org) 已從簽章中排除,以允許向多個 AMP Cache 運算子提交相同的已簽署要求。
  • 針對簽章驗證,您必須在 AMP 文件網域的固定位置提供公開 RSA 金鑰 (如要產生金鑰,請參閱產生 RSA 金鑰)。例如:
    https://example.com/.well-known/amphtml/apikey.pub
  • 公開金鑰不得為「漫遊器」
  • 網址必須是 HTTPS。
  • 網域必須是您要更新的確切網域,而不是子網域或上層網域。
  • 您必須以 PEM 格式發布金鑰,並使用 content-type &quo/plain/quot; 提供金鑰。
  • 無論文件是否透過任何 rel=canonical 標記指定網域,AMP 快取一律都會從要求的網域擷取公開金鑰。如果來源網域在要清除的位置提供 HTTP 重新導向,則只會從要求的路徑從快取中清除,而不是從重新導向的目標清除。

更新或移除內容

將內容從來源中移除後,您可以使用 update-cache 更新或永久從 Google AMP 快取中移除內容。如要更新或移除內容,請按照下列步驟操作:

  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 金鑰。您也可以產生 RSA 金鑰,並透過 OpenSSL 程式庫或對等的加密 API (節點加密、NSS 或 GnuTLS) 以程式輔助的方式管理金鑰。

  1. 產生文字 PEM 格式的一對 RSA 金鑰,如下所示:
    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

    login.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 快取連結存取 RSA 金鑰,Google 可能會在幾小時內檢索新的 RSA 金鑰。AMP 快取連結如下:

https://example-com.<cache.updateCacheApiDomainSuffix>/r/s/example.com/.well-known/amphtml/apikey.pub