Назад | Перейти на главную страницу

Cache-Control не работает в метаданных объекта AWS S3

Продолжение моего первоначального вопроса: Нет заголовка Cache-Control для файлов из AWS CloudFront с S3 Origin

Я обслуживаю статические файлы с помощью AWS CloudFront с AWS S3 в качестве источника. Я попытался установить заголовок Cache-Control для своих объектов с помощью веб-консоли AWS, как указано в ответе в моем исходном вопросе (ссылка выше). И когда я получаю доступ к файлу по ссылке AWS S3, Я уже вижу заголовок Я добавил: Cache-Control: общедоступный, max-age = 31536000.

Проблема в том, что браузер не уважает заголовок. Когда я перезагружаю / обновляю ту же ссылку, я получаю 304 - Не изменено ответ вместо 200 (кэшировано) ответ.

Я тоже пробовал значение макс-возраст = 300 (нет Общественные), а также попробовал значение внутри "" но я всегда получаю 304 ответ. Я также пытался добавить Истекает заголовок из S3, но те же результаты.

Как заставить браузер уважать заголовок кеша? Я хочу использовать кеширование браузера и сэкономить на использовании AWS.

Дополнительное примечание: My S3 Bucket не настроен для статического хостинга веб-сайтов. На всякий случай это как-то связано с этим.

РЕДАКТИРОВАТЬ: ниже приведены живые заголовки HTTP

https://cdn.example.com/path/logo.png

GET /path/logo.png HTTP/1.1
Host: cdn.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:45.0) Gecko/20100101 Firefox/45.0
Accept: image/png,image/*;q=0.8,*/*;q=0.5
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate, br
Referer: https://www.example.com/
Connection: keep-alive
If-Modified-Since: Tue, 12 Apr 2016 10:29:24 GMT
If-None-Match: "xxxxxxxxxxxxxxxxxxxxxxxxxxx"

HTTP/1.1 304 Not Modified
Connection: keep-alive
Date: Sat, 16 Apr 2016 09:33:08 GMT
Etag: "xxxxxxxxxxxxxxxxxxxxxxx"
Server: AmazonS3
Age: 67885
X-Cache: Hit from cloudfront
Via: 1.1 xxxxxxxxxxxxxxx.cloudfront.net (CloudFront)
X-Amz-Cf-Id: xxxxxxxxxxxxxxxxxxxxxxxxxxxx==

РЕДАКТИРОВАТЬ: я получаю 200 ответ, если я перезагружу и 304 Не изменено если я нажму Enter в адресной строке URL. Кроме того, ресурсы Google при загрузке той же страницы получают ответ 200 (из кеша) а не с 304.

ОБНОВИТЬ:

Онлайн-тесты в настоящее время обнаруживают, что файлы уже кэшированы. Сделал тест на http://www.webpagetest.org/ и http://tools.pingdom.com/. Также с Google Page Speed. Я думаю, что потребовалось время, чтобы распределить файлы по периферии. Это странно, поскольку я менял имена файлов при каждом редактировании, чтобы изменения происходили немедленно. Но что касается кеширования, может потребоваться время для распределения кеша по периферийным местоположениям. Все еще делаю еще несколько тестов.

200 - это ответ ОК, это означает, что сервер отправил запрошенный ресурс. 304 не изменен означает, что объект находится в кэше браузера, браузер проверил.

Если вы нажали перезагрузку, возможно, проблема связана с браузером, а не с сервером. Вы сказали ему перезагрузиться, поэтому он отправляется на сервер. Попробуйте загрузить этот ресурс, войдя в URL-адрес и нажав «ввод», а не «перезагрузить».

Попробуйте плагин "live http headers" для Firefox, он хорошо показывает, что происходит.

Основываясь на том, что вы сказали, я не думаю, что это действительно проблема, но вам нужно опубликовать вывод Live HTTP Headers, чтобы мы были уверены. Если вы это сделаете, не используйте только один ресурс, загрузите статическую html-страницу и пусть она ссылается на jpg в CDN.