Вы были правы с точки зрения стоимости, которую CloudFront не улучшит. Я вводил в заблуждение.
Возвращаясь к вашей проблеме, вы можете кэшировать файлы в корзине S3, добавляя для этого метаданные. Например:
Cache-control = max-age=172800
Вы можете сделать это в консоли или, например, через aws cli
.
Если вы запрашиваете файлы напрямую , и этиПри наличии заголовков браузер должен выполнить проверку на etag
Проверка кэшированных ответов с помощью ETags TL; DR Сервер использует HTTP-заголовок ETag для передачи токена проверки. Маркер проверки включает эффективные проверки обновления ресурса: данные не передаются, если ресурс не изменился.
Если вы запрашиваете файлы с помощью метода s3.getObject
, он все равно выполнит запрос, поэтому он загрузитСнова файл.
Нажатие не запрашивая:
Если вы не можете сделать это, вы можете подумать о том, что бэкэнд отправляет только новые данные во внешний интерфейс, а незапрос новых данных каждые 5 секунд, что значительно снизит нагрузку.
---
Не так эффективно с точки зрения затрат, более сфокусирован на скорость.
Вы можете использовать CloudFront какCDN для вашего S3 ведра. Это позволит вам быстрее получить файл, а также CloudFront будет обрабатывать кэш для вас.
Вам потребуется настроить TTL в соответствии с вашими потребностями, вы также можете аннулировать кэш каждый раз, когда вы делаете загрузкуфайл, если вам это нужно.
Из документов :
Хранение статического содержимого с помощью S3 дает много преимуществ. Но чтобы помочь оптимизировать производительность и безопасность вашего приложения при эффективном управлении затратами, мы рекомендуем вам также настроить Amazon CloudFront для работы с корзиной S3 для обслуживания и защиты контента. CloudFront - это сеть доставки контента (CDN), которая обеспечивает безопасное и масштабное размещение статического и динамического веб-контента, видеопотоков и API-интерфейсов по всему миру. В принципе, доставка данных из CloudFront может быть более экономичной, чем доставка данных из S3 непосредственно вашим пользователям.