Решением этой проблемы является распределение облачного фронта для определения других вариантов поведения кэша в дополнение к DefaultCacheBehavior (*).
Настройка поведения кэша по умолчанию с использованием связи lambda @ edge origin-request. Когда вызывается связь источника с запросом, она должна вернуть ответ, включающий содержимое файла index.html вместе со всеми необходимыми заголовками. Этот ответ будет кэшироваться в дистрибутиве для любых запрошенных виртуальных путей. Для функции lambda @ edge есть два способа получить это содержимое:
Из кода функции вызвать http (s) get для файла index.html по URL-адресу облачного фронта(например, dklyksfhsksdgjh.cloudfront.net/index.html). Дистрибутив вернет файл на основе другого поведения кэша, отличного от заданного по умолчанию, которое вы также настроите. Этот подход обеспечивает менее оптимальную производительность при первом запросе любого виртуального пути html5, хотя последующие запросы будут обслуживать содержимое из кеша распространения облачного фронта.
Встраивать содержимое index.htmlфайл в код функции lambda @ edge в процессе сборки функции. Этот подход обеспечивает лучшую производительность, чем вариант № 1, поскольку сетевой запрос для получения содержимого файла не требуется.
Дополнительно настройте другое поведение кэша для шаблона пути /index.html
с источником-ответ лямбда @ край ассоциация. Когда вызывается связь происхождения и ответа, в ответ должны быть добавлены все необходимые заголовки.
Если в дистрибутиве содержатся другие файлы (такие как /robots.txt, /favicon.ico, / fonts, / scripts,/ styles и т. д.), установите дополнительные режимы кэширования, соответствующие этим путям. Это необходимо для того, чтобы запросы к этим файлам не возвращали файл index.html во время исходного запроса-привязки поведения кэша lambda @ edge Ассоциации.
При таком подходе запросы на корень приложения (т. Е. Www.site.com или www.site.com/index.html) будет соответствовать поведению кэша /index.html, получит файл из его источника S3, добавит все необходимые заголовки с помощью ассоциации lambda @ edge origin-response и кэшируетфайл. Первый запрос должен содержать заголовок ответа x-cache: Miss from cloudfront
, но последующие запросы должны возвращать x-cache: Hit from cloudfront
до истечения срока действия кэша TTL.
Запросы для других файлов (например, /robots.txt, /scripts/myscript.js). и т. д.) будут соответствовать другим режимам кэширования, которые вы определяете для других путей к файлам в дистрибутиве.
Запросы для виртуальных путей HTML5 (т. е. www.site.com/path/handled/by/javascript) будут совпадать со значениями по умолчаниюповедение кэша и из-за привязки lambda @ edge origin-запроса возвращают index.html без проверки каких-либо файлов в источнике S3. Вам все равно нужно будет добавить все необходимые заголовки, такие как привязка lambda @ edge происхождение-ответ, для поведения кэша /index.html. Запросы будут кэшироваться, хотя каждый виртуальный путь HTML5 будет кэшироваться отдельно. Например, запрос для / foo и запрос для / bar вызовут ассоциацию lambda @ edge origin-request перед кэшированием.