Почему CloudFront кеширует объект s3, хотя там нет никаких настроек кеша? - PullRequest
0 голосов
/ 05 ноября 2018

У меня есть CloudFront дистрибутив с s3 корзиной в качестве источника.

В распределении используется настройка Use Origin Cache Headers.

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

enter image description here

После этого я загружаю файл через консоль S3 и пытаюсь получить файл, используя curl. (Конечно, метаданных Cache-Control нет)

enter image description here

$ curl -X GET https://xxxxxxxxxxx/file -v
.
.
X-Cache: Miss from cloudfront
.
.
.
$ curl -X GET https://xxxxxxxxxxx/file -v
.
.
X-Cache: Hit from cloudfront.
.
.

Я ожидал, что все запросы должны возвращать cache-miss, потому что нигде нет настроек для кэша (метаданные объектов CloudFront и S3). Однако, как видите, второй запрос возвращает cache-hit.

Почему CloudFront его кэширует?

Есть ли скрытые настройки кэша по умолчанию?

1 Ответ

0 голосов
/ 05 ноября 2018

То, как консоль представляет это, по общему мнению, очень запутанно и, возможно, даже не "правильно".

CloudFront всегда использует заголовки кэша источника , а всегда использует Min / Default / Max TTL.

Использовать заголовки кэша Origin фактически означает "Использовать заголовки кэша Origin со стандартными значениями CloudFront по умолчанию и ограничивающими значениями."

Настройка фактически означает «Использовать заголовки кэша источника с настраиваемыми значениями CloudFront по умолчанию и ограничивающими значениями.»

Таким образом, объекты без Cache-Control кэшируются на срок до Default TTL - 86400 секунд по умолчанию. Если вам не нужно это поведение, переключитесь на Customize и установите Default TTL на значение, которое CloudFront будет использовать в качестве TTL объекта, если в заголовках нет значения Cache-Control.

Если Cache-Control присутствует , CloudFront игнорирует Default TTL и вместо этого использует ограничивающие значения Minimim TTL и Maximum TTL, чтобы определить, следует ли использовать внутренние значения Cache-Control источника или переопределить их. Если вне диапазона, CloudFront настраивает свой внутренний таймер так, чтобы TTL объекта находился в диапазоне> = Minimum TTL (по умолчанию 0 секунд) и <= <code>Maximum TTL (1 год), уменьшая слишком большие значения до максимума и увеличивая слишком малые значения до мин. Если значение Cache-Control уже находится в этом диапазоне, значение из Cache-Control используется как есть. В любом случае, CloudFront фактически не изменяет сам заголовок Cache-Control.

https://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/Expiration.html

...