Мой дистрибутив Cloudfront агрессивно кэширует мой index.html
файл при первоначальном запросе GET
. В то время как я использую версионные имена файлов для всех остальных файлов, я хочу получить самые свежие index.html
для каждого запроса. Источник - это контейнер S3, и я загружаю свой файл, используя флаг --cache-control
:
aws s3 cp index.html s3://buck/index.html --cache-control "max-age=0"
Когда вышеприведенное не сработало, я попытался:
aws s3 cp index.html s3://buck/index.html --cache-control "no-store"
Я проверил, что заголовки установлены на объекте S3:
> aws s3api head-object --bucket buck --key index.html
{
"AcceptRanges": "bytes",
"LastModified": "Tue, 31 Mar 2020 14:10:40 GMT",
"ContentLength": 3265,
"ETag": "",
"CacheControl": "no-store",
"ContentType": "text/html",
"Metadata": {}
}
Что пахнет, что после Я изменяю элемент управления кэшем на no-store
, , заголовки ответа в браузере по-прежнему показывают cache-control: max-age=0
. Я также вижу x-cache: Miss from cloudfront
, но я предполагаю, что можно ожидать? Открытие сайта в приватном окне показывает правильный заголовок ответа.
My CacheBehaviors
для распространения:
{
"Quantity": 1,
"Items": [
{
"PathPattern": "index.html",
"TargetOriginId": "hostingS3Bucket",
"ForwardedValues": {
"QueryString": false,
"Cookies": {
"Forward": "none"
},
"Headers": {
"Quantity": 0
},
"QueryStringCacheKeys": {
"Quantity": 0
}
},
"TrustedSigners": {
"Enabled": false,
"Quantity": 0
},
"ViewerProtocolPolicy": "redirect-to-https",
"MinTTL": 0,
"AllowedMethods": {
"Quantity": 2,
"Items": [
"HEAD",
"GET"
],
"CachedMethods": {
"Quantity": 2,
"Items": [
"HEAD",
"GET"
]
}
},
"SmoothStreaming": false,
"DefaultTTL": 0,
"MaxTTL": 0,
"Compress": true,
"LambdaFunctionAssociations": {
"Quantity": 0
},
"FieldLevelEncryptionId": ""
}
]
}
По документам aws cloudfront похоже, что CloudFront и браузеры должны учитывать заголовки при добавлении источника Cache-Control: no-store
. Я не уверен, что я делаю неправильно. Должен ли я сделать кэш недействительным? Я хотел бы понять это поведение, чтобы я мог обновлять свой сайт предсказуемым образом.