Примечание: перенаправляет, которые изменяют и имя хоста и , схема может быть проблематичной, больше в будущем, чем сейчас, так как браузеры становятся менее приемлемыми для поведения HTTP без TLS.В данный момент я не могу найти источник, подтверждающий это, но у меня сложилось впечатление, что следует избегать перенаправления напрямую с http://www.example.com
на https://example.com
.Тем не менее, если это то, что вы хотите ...
CloudFront и Lambda @ Edge поддерживают это, но только в триггере запроса на отправку.
Если вы включаете белый список заголовка CloudFront-Forwarded-Proto
вв настройках поведения кэша вы можете получить доступ к этому значению следующим образом:
const request = event.Records[0].cf.request; // you may already have this
const scheme = request.headers['cloudfront-forwarded-proto'][0].value;
Значение scheme
будет http
или https
.
Я являюсьнемного педантичный, поэтому мне нравится отказоустойчивость.Эта альтернативная версия всегда будет устанавливать scheme
в https
и избегать исключения, которое будет выброшено, если по какой-либо причине заголовок отсутствует.Это может или не может соответствовать вашему вкусу:
const request = event.Records[0].cf.request; // you may already have this
const scheme = (request.headers['cloudfront-forwarded-proto'] || [{ value: 'https' }])[0].value;
Причина, по которой это может быть сделано только в триггере исходного запроса, заключается в том, что CloudFront фактически не добавляет этот заголовок внутри, пока не будет запущен триггер Viewer Request., если он есть.
Но учтите также, что вы почти наверняка захотите сделать это в триггере исходного запроса - потому что ответы от этих триггеров могут быть кэшированы ... что должно означатьболее быстрое реагирование и снижение затрат.Белый список заголовков также добавляет его к ключу кэширования. Это означает, что CloudFront будет автоматически кэшировать отдельные ответы HTTP и HTTPS для любой страницы и воспроизводить их только для идентичных запросов.
См. Также https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/lambda-requirements-limits.html#lambda-cloudfront-star-headers