Аутентификация запросов в AMP-письмах
XHR-запросы не содержат cookie, поэтому следует идентифицировать пользователя с помощью токенов доступа.
Токен нужен для гарантии, что только тот, кто имеет доступ к AMP-письму, может выполнять содержащиеся в нем запросы. Токены доступа должны быть криптографически защищены и ограничены по времени и объему. Они включены в URL запроса.
Этот пример демонстрирует использование <amp-list> для отображения аутентифицированных данных:
<amp-list src="https://example.com/endpoint?token=REPLACE_WITH_YOUR_ACCESS_TOKEN"
height="300">
<template type="amp-mustache">
...
</template>
</amp-list>
При использовании <amp-form> поместите токен доступа в action-xhr URL:
<form action-xhr="https://example.com/endpoint?token=REPLACE_WITH_YOUR_ACCESS_TOKEN" method="post">
<input type="text" name="data">
<input type="submit" value="Send">
</form>
Проверка прокси-сервером
Все XHRs, поступающие из AMP-письма, проходят проверку прокси-сервером Mail, чтобы защитить данные пользователя.
Ниже описано, какие заголовки ожидаются в запросе и ответе сервера.
- Новая схема проверки
- Старая схема проверки
Запрос
Когда письмо обращается за данными через
amp-form,amp-listили любой другой компонент, который подлежит проверке CORS, запросы на ваш сервер содержат заголовокAMP-Email-Senderс адресом отправителя письма.Например:
AMP-Email-Sender: sender@example.comОтвет
В ответе ваш сервер может подтвердить, что
AMP-Email-Sender— это отправитель, которому можно доверять. Если это не так, сервер может ответить403 Forbiddenи запрос будет отклонен.Если запрос подтвержден, сервер должен включить в ответ заголовок
AMP-Email-Allow-Sender. Значение заголовка может быть:- адресом отправителя, письмам от которого разрешено отправлять запросы на ваш сервер. В этом случае заголовок ответа повторяет значение заголовка запроса
AMP-Email-Sender; - символом
*, если вы хотите разрешить делать запросы на ваш сервер из любых писем. Это значение рекомендуется только для тестовых целей.
Например:
AMP-Email-Allow-Sender: sender@example.comСервер должен соответствующим образом ответить на запрос предварительной проверки (
OPTIONS), который содержит заголовокAccess-Control-Request-Headers: AMP-Email-Sender. Тем не менее, почтовый клиент не гарантирует выдачу предварительных запросов.Работа писем вне почтовых клиентов
Обратите внимание, что вышеуказанные требования относятся к отображению писем внутри почтовых клиентов и песочницы Mail. Если вы хотите, чтобы ваши письма также работали и вне почтовых клиентов, вам нужно реализовать стандартный механизм CORS.
- адресом отправителя, письмам от которого разрешено отправлять запросы на ваш сервер. В этом случае заголовок ответа повторяет значение заголовка запроса
При возможности пользуйтесь новой схемой проверки. Скоро мы перестанем поддерживать эту схему проверки прокси-сервисом.
Запросы
Запросы, поступающие от прокси-серверов Mail, содержат следующий заголовок:
Origin: https://e.mail.ruТакже они могут содержать следующий query-параметр:
__amp_source_origin=<sender email address>Например, XHR-запрос от
amp-listкhttps://example.com/data.json, который исходит из письма с адресаsender@example.com,выглядит так:Request URL: https://example.com/data.json?__amp_source_origin=sender@example.com Request Method: GET Origin: https://e.mail.ruВы должны проверять эти значения и отклонять любые запросы, которые их не содержат.
Ответы
Все ответы должны содержать три заголовка:
Access-Control-Allow-Origin: https://e.mail.ru AMP-Access-Control-Allow-Source-Origin: <ваш адрес, с которого ведутся рассылки> Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-OriginНапример, если письмо отправлено с адреса
sender@example.com, заголовки должны включать следующее:Access-Control-Allow-Origin: https://e.mail.ru AMP-Access-Control-Allow-Source-Origin: sender@example.com Access-Control-Expose-Headers: AMP-Access-Control-Allow-Source-OriginЕсли ответ не содержит эти заголовки, прокси-сервер Mail отклонит ответ и пользователь не увидит динамический контент в письме.
Ограничения
XHR URL не должны использовать HTTP-редиректы. Запросы, которые возвращают статус кодов редиректов (например, 302 Found или 308 Permanent Redirect), вызывают ошибку и предупреждение в консоли браузера.
Создание AMP-писем
Чтобы создавать AMP-письма, используйте документацию формата.
Также вы можете использовать наш HTML-редактор для написания AMP-писем. Редактор показывает готовое решение и выделяет ошибки, которые можно исправить там же. Готовый результат вы сразу же сможете отправить себе в почту.

