2

Я перехожу на Amazon Cloudfront для обслуживания изображений на моем сайте. Чтобы уменьшить нагрузку, когда мы, наконец, сделаем ее вживую, я подумал о том, чтобы разогревать кеш, нажав URL-адреса изображений (я делаю запрос от Индии и ожидаю, что большинство пользователей запросят от того же региона, поэтому нет необходимости иметь копию объекта на все края по всему миру).MISS от Cloudfront после HIT от Cloudfront

Проблема заключается в том, что скрипт использует завиток для запроса изображения, и когда я получаю доступ к одному и тому же URL-адресу в браузере, я получаю MISS из Cloudfront. Таким образом, Cloudfront создает две копии объекта для этих двух запросов.

Моя текущая конфигурация Cloudfront пересылает запрос Content-Type Заголовок в начало.

Как настроить Cloudfront так, чтобы он вообще не интересовался заголовками запросов, и как только я сделал запрос (будь то завиток или используемый браузер), он должен обслуживать весь будущий запрос для того же ресурса из края, а не из источника.

Запрашиваемые/Ответные заголовки Я боюсь, что URL-адрес Cloudfront не будет доступен извне (пока мы не продолжим жить), но я отправляю заголовки запросов/ответов, это должно дать вам справедливую идею. Также вы можете проверить заголовки кэширования при возникновении - https://origin.ixigo.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg

Ответ после двух последовательных запроса с помощью браузера
Remote Address: 54.230.156.66: 443
URL запроса: https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
Метод запроса: GET
Status Code : 200 OK
Response Headers
просмотреть исходный
Accept-Диапазоны: байты
Возраст: 23
Cache-Control: общественность, макс возраста = 31557600
соединения: держать-жив
Content-Length: 8708
Content-Type: изображение/JPG
Дата: Пт, 27 Nov 2015 9:16:03 GMT
ETag: "- 170562206"
Last-Modified: Вс, 29 июня 2014 3:44:59 GMT
Vary: Accept-Encoding
Via: 1,1 7968275877e438c758292828c0593684.cloudfront.net (CloudFront)
X-АМЗ -Cf-Id: fcbGLv8uBOP89qfR52OWa-NlqWkEREJPpZpy9ix0jdq8-a4oTx7lNw ==
X-Backend: image6_40
X-Cache: Hit от CloudFront
X-Cache-Hits: 0
X-устройств: ПК
X-DeviceType: шт
X-Powered-By: XYZ

Теперь же URL запрошены с использованием локон, но дал мне пропустить
локон ману-MDC: кэш Манук $ свернуться -I https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
HTTP/1.1 200 OK
Content-Type: изображение/JPG
Content-Length: 8708
соединения: держать-жив
Возраст: 0
Cache-Control: общественность, макс возраста = 31557600
Дата: Пт, 27 ноября 2015 9:16:47 GMT
ETag: "-170562206"
Last-Modified: Вс, 29 июня 2014 3:44:59 GMT
X-Backend: image6_40
X-Cache-Hits: 0
X-Device: pc
X-DeviceType: шт
X-Powered-By: хуг
Vary: Accept-Encoding
X-Cache: Miss от CloudFront
Via: 1,1 4d42171c56a4c8b5c627040e6aa0938d.cloudfront.net (CloudFront)
X-Amz- Cf-Id: fY0LXhp7NlqB-I8F5-1TIMnA6bONjPD3CEp7dsyVdykP-7N2mbffvw ==

Теперь это даст ХИТ
Ману-MDC: кэш Манук $ локон -I https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
HTTP/1.1 200 OK
C ontent-Type: изображение/JPG
Content-Length: 8708
соединения: держать-живой
Cache-Control: общественность, макс возраста = 31557600
Дата: Пт, 27 ноября 2015 9:16:47 GMT
ETag: "-170562206"
Last-Modified: вс, 29 июня 2014 03:44:59 GMT
X-Backend: image6_40
X-Cache-Hits: 0
X-устройств: ПК
X -DeviceType: pc
X-Powered by By: xyz
Возраст: 3
Vary: Accept-Encoding
X-кэша: Hit от CloudFront
Via: 1.1 6877899d48ba844a34ea4378ce336f06.cloudfront.net (CloudFront)
X-Дигг-Cf-Id: qpPhbLX_5t2Xj0XZuZdjWD2w-BI80DUVyL496meQkLfSEn3ikt7hNg ==

+0

Любой заголовок запроса, который вы пересылаете, будет использоваться для целей кеширования. Это должно быть, потому что источник может изменить ответ любым отправленным вами заголовком. Не нужно пересылать заголовок «Content-Type», поскольку пересылка заголовка не применяется к запросам «писать» (например, 'PUT' или' POST') ... Все заголовки перенаправляются для этих запросов. Пересылка заголовков с помощью белого списка применяется только к запросам 'GET' и' HEAD' (и * возможно * 'OPTIONS'). –

+0

Я не хочу, чтобы CloudFront использовал заголовки для кэширования, поэтому я выбираю заголовок, который никто не будет передавать в GET-запросе (изначально я не пересылал заголовки, поэтому, чтобы избежать поведения по умолчанию CloudFront, я перенаправил это). Но это ничего не должно делать, потому что я все равно не передаю его. Проблема: как мне настроить CloudFront так, чтобы он вообще не интересовался заголовками запросов, и как только я сделал запрос (зависание или использование браузера), он должен обслуживать весь будущий запрос для того же ресурса с края, а не происхождение. Я пробовал двигаться вперед, так что должно быть что-то еще. – manu4543

+0

Это, или вы неправильно диагностируете проблему. Является ли это повторяемое поведение, которое вы видите, со всеми запрошенными объектами? –

ответ

2

Это похоже на этот вопрос: Why are two requests with different clients from the same computer cache misses on cloudfront?

в зависимости от того, обеспечивают ли вы в «Accept-Encoding: GZIP» заголовок или нет, пограничный сервер CloudFront кэширует объект отдельно. Поскольку браузеры предоставляют этот заголовок по умолчанию, и ваш сайт, вероятно, будет доступен в основном через браузер, я предлагаю изменить ваш вызов curl, чтобы включить этот заголовок.

Я столкнулся с той же проблемой, после внесения изменений в мой вызов, я начал получать Hit из браузера при первой попытке через браузер (после совершения звонка).

Еще одна вещь, которую я заметил, - это то, что CloudFront требует, чтобы весь запрошенный объект был загружен до того, как он будет кэширован. Если вы попытаетесь частично загрузить файл, указав диапазон байтов в curl, предполагаемый объект не будет кэшироваться, только загруженная часть будет кэшироваться как другой объект. То же самое касается завитка, который был прерван между ними. Другими параметрами, которые я пробовал, был wget-вызов с опцией паука, но он внутренне выполняет только вызов HEAD и, таким образом, не получает содержимое, кэшированное на пограничном сервере.

Смежные вопросы