Аутентификация запросов в 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-писем. Редактор показывает готовое решение и выделяет ошибки, которые можно исправить там же. Готовый результат вы сразу же сможете отправить себе в почту.