Как обновлять AMP-контент

Используйте запрос update-cache, чтобы обновлять контент в Google AMP Cache или удалять его. На сегодняшний день запрос update-cache обеспечивает только обновление контента в пределах интервала, который задается с помощью директивы max-age. Она определяет максимальный период времени, в течение которого тот или иной ресурс считается актуальным.

Владельцу домена необходимо подписывать запросы update-cache с помощью ключа RSA и публиковать соответствующий открытый ключ на странице со стандартным URL в домене источника.

Вы можете удалить текущую кешированную версию документа, отправив запрос с цифровой подписью в Google 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-com и example.com

Обязательно

Доменное имя, соответствующее формату URL контента в Google AMP Cache.
<cache.updateCacheApiDomainSuffix>

Обязательно

Доменное имя AMP Cache. Подробнее о выполнении запроса update-cache
amp_ts=<ts_val>

Обязательно

Этот параметр представляет собой временную метку UNIX, используемую для защиты от атак повторного воспроизведения. В качестве значения должно быть указано время в секундах, отличающееся от текущего в ту или иную сторону не более чем на минуту.
amp_url_signature=<sig_val>

Обязательно

Этот параметр представляет собой RSA-подпись полного URL запроса (URL с элементами amp_action и amp_ts, но без самой подписи). Подробные сведения вы найдете в разделе этой статьи, который посвящен созданию ключа RSA.

Правила

Вы должны соблюдать правила использования запроса update-cache:

  • Имя хоста AMP Cache (cdn.ampproject.org) исключается из цифровой подписи, чтобы один запрос с подписью можно было отправлять нескольким операторам AMP Cache.
  • Для осуществления проверки подписи необходимо, чтобы открытый ключ RSA был постоянно размещен на одном и том же месте в домене AMP-документа (см. также раздел Создание ключа RSA). Пример:
    https://example.com/.well-known/amphtml/apikey.pub
  • Не следует блокировать доступ к открытому ключу в файле robots.txt.
  • У URL должен быть префикс https.
  • Следует указывать в точности тот домен, который вы хотите обновить, а не домен верхнего или нижнего уровня.
  • Вы должны опубликовать ключ в формате PEM со значением "text/plain" в поле заголовка Content-Type.
  • AMP Cache всегда получает открытый ключ из домена, указанного в запросе, независимо от того, какой домен отмечен в документе с помощью атрибута rel="canonical". Если домен источника выполняет переадресацию HTTP в документе, кешированная версия которого подлежит удалению, то оно производится строго в соответствии с запросом и не затрагивает целевой URL переадресации.

Обновление и удаление контента

С помощью update-cache можно обновлять контент в Google AMP Cache или удалять его, если он больше не представлен в домене источника. Чтобы выполнить одно из этих действий, следуйте инструкциям ниже.

  1. Извлеките следующий файл:
    https://cdn.ampproject.org/caches.json
  2. Выполните перебор элементов массива caches в этом файле JSON.
  3. Выберите кеши (caches), в которых хотите сохранять контент.
  4. Выполните запрос update-cache с параметром updateCacheApiDomainSuffix из каждого элемента cache.
  5. Составьте нужные URL, придерживаясь следующего формата:
    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 (модуль crypto Node.js, NSS или GnuTLS).

  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

    У URL должен быть префикс 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. Закодируйте подпись RSA с помощью разновидности Base64, подходящей для использования в Интернете:
    cat signature.bin | base64 -w0 | tr '/+' '_-' | tr -d '=' > base64.txt
  6. Добавьте закодированную подпись RSA к URL, воспользовавшись параметром запроса amp_url_signature:
    echo "$(cat url.txt)&amp_url_signature=$(cat base64.txt)"

Обновление ключа RSA

Если вы хотите обновить ключ RSA, то можете перейти к нему по ссылке AMP Cache. Через несколько часов ваш новый ключ будет просканирован Google. Ссылка AMP Cache выглядит так:

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