Обработка запросов с заголовком Accept-Encoding в CloudFront против запроса без заголовка Accept-Encoding - PullRequest
0 голосов
/ 03 апреля 2019

У меня есть Cloud Front Distribution для кэширования моих изображений. мой исходный сервер НЕ S3, это какой-то сервер, на котором я работаю.

Я использую эти изображения на своем веб-сайте (используя преимущества кэширования CF). Теперь, чтобы объяснить проблему, давайте предположим, что на моей домашней странице я использую изображение с именем banner.png.

Я захожу на свою домашнюю страницу, скажем, из-за chrome впервые - для banner.png она отсутствует в кеше, поэтому она извлекается из источника и кэшируется в CF.

После этого я захожу на мою страницу из FF, Opera, Chromium, GET "banner.png" с помощью почтальона - this all gets me the file from CF cache.

Теперь я получаю "banner.png", используя бессонницу (Другой клиент покоя) - Now CF doesn't send me from cache, it goes back to origin to get the image, and reply me with **"x-cache: RefreshHit from cloudfront"**.

разница между этими двумя наборами клиентов заключается в том, что первый набор клиентов отправляет заголовок "Accept-Encoding: gzip" в запросе, а второй клиент этого не сделал.

в моем поведении CF -

"Кэш на основе выбранных заголовков запроса" = НЕТ

Объекты автоматически "= NO" Сжать

.

Есть указатели?

1 Ответ

0 голосов
/ 03 апреля 2019

CloudFront хранит две разные копии кэша на основе кодировки Accept.

  1. Один, если заголовок содержит кодировку Accept: gzip

  2. Accept-encoding: любое другое значение или без заголовка.

Вы можете проверить его с помощью curl, сначала без accept-encoding, а второй запрос с accept-encoding: gzip, и вы увидите MISSот CloudFront это ожидается с CloudFront.

Причина в том, что CloudFront поддерживает только сжатие gzip и учитывает этот заголовок, чтобы знать, нужно ли сжимать ответ.

Тем не менее, ваша проблема выглядит иначе: вы видите Refersh из CloudFront, который происходит, когда срок действия CloudFront TTLs / Max-age истекает, а CloudFront создает условие GET для источника, чтобы узнать, был ли изменен контент или нет.В идеале это должен быть Miss From CloudFront, если отсутствует заголовок accept.

...