AWS Lambda @ Edge. Доступ к cookie-файлам браузера в инициируемой функции ответа - PullRequest
0 голосов
/ 05 июля 2018

(Моя настройка: CloudFront + S3 Origin)

Привет всем!

Вот что я пытаюсь сделать:

Шаг 1. Запуск лямбда-функции по запросу зрителя. Получить файл cookie с предпочитаемым пользователем языком, если он доступен (этот файл cookie устанавливается, когда пользователь выбирает язык сайта).

Шаг 2. Запустите лямбда-функцию при возникновении ответа. Если ответ является ошибкой (например, 404), верните страницу ошибки зрителю на основе предпочтительного языка cookie из шага 1.

Мой вопрос: как сделать информацию, полученную на шаге 1, доступной на шаге 2? В общем, как мне обработать ответ на основе пользовательского запроса И информации о происхождении ответа? Буду признателен за любое предложение. Спасибо!

1 Ответ

0 голосов
/ 06 июля 2018

Вам не нужен шаг 1.

Белый список cookie для пересылки к источнику в поведении кэша. Это заставляет CloudFront кэшировать отдельную копию каждой страницы, основываясь на значении cookie. В любом случае вам это понадобится, если ваш источник сможет увидеть файл cookie.

В Lambda @ Edge есть триггеры на стороне просмотра (перед кэшем) и триггеры на стороне источника (за кэшем).

Триггер ответа источника может видеть ответ, полученный от источника, но также может видеть запрос, отправленный источнику.

запрос

Ответ источника - запрос, который CloudFront направил источнику и который мог быть изменен функцией Lambda, который был вызван событием запроса источника

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-event-structure.html#lambda-event-structure-response

Нет простого способа отправить информацию из триггера запроса средства просмотра в триггер ответа источника, поскольку они находятся на противоположных сторонах кэша и не могут напрямую взаимодействовать.

Ваш обработчик будет передан event.

Все, что вам нужно, находится в event.Records[0].cf.

const cf = event.Records[0].cf;

Ответ находится в cf.response, а запрос в cf.request.

Если статус ответа не 404, выведите из строя исходный триггер ответа и разрешите CloudFront продолжить обработку.

if(cf.response.status != "404')
{
  return callback(null, cf.response);
}

В противном случае извлеките файл cookie из cf.request.headers.cookie (вам нужно будет проанализировать этот массив после проверки его существования - если браузер не предоставил файлы cookie, он не будет генерировать пользовательский ответ на основе файла cookie). и верните его.

См. Сгенерированные ответы - Примеры , чтобы узнать, как вернуть сгенерированный ответ.

Поскольку вы генерируете ответ в триггере исходного ответа, он будет сохранен в кеше в соответствии со значением Минимальное время кэширования ошибок (по умолчанию 5 минут).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...