Как кеширование в браузере обрабатывает изображения с горячей ссылкой + 204 ответа?
Я видел несколько противоречивых ответов в сети, и я пытаюсь понять это на фундаментальном уровне. Скажем, у меня есть изображение с горячей ссылкой (да, с разрешения) на моем сайте:
<img src="externalserver.com/catpic.png">
- При условии, что у всех соответствующих сторон включено кэширование в браузере, будет ли это изображение кэшироваться (также можно ли кэшировать изображения с внешних сайтов)?
- Если внешний сервер решит обслуживать другой образ в том же месте файла, скажем, с перезаписью.htaccess, будет ли поврежден кеш?
- Если внешний сервер решает обслуживать одно и то же изображение с
?randomquerystring
после этого кеш будет сломан? - Если внешний сервер отправляет HTTP-код состояния 204 вместо фактической передачи изображения, что происходит с кэшированием?
Спасибо! Счастливых вам праздников.
1 ответ
Все это зависит.
- Пользовательский агент может кэшировать изображения. Будет ли он кэшировать изображения, зависит от того, как установлен сервер
Cache-Control
или жеExpires
заголовок. Для получения дополнительной информации посмотрите страницу заголовка Cache-Control в MDN. - Пользовательский агент может или не может получить новый ресурс. Это зависит от
Cache-Control
заголовок,Expires
заголовок, является ли ресурс устаревшим, использует ли сервер валидатор и выполняет ли он слабую или сильную проверку. Для получения дополнительной информации посмотрите страницу условных запросов HTTP в MDN. - Сервер не обслуживает ресурс с
?randomquerystring
, Скорее, клиент может запросить ресурс с?randomquerystring
,?randomquerystring
называется кэш-бастером. Пользовательский агент выполнит новый запрос, но я слышал, что некоторые прокси могут игнорировать кеш-буфер этого типа и по-прежнему возвращать кешированный ответ. - Пользовательский агент, вероятно, будет уважать
Cache-Control
а такжеExpires
заголовки. Соответствующая выдержка из RFC 2616:Ответ, полученный с любым другим кодом состояния (например, коды состояния 302 и 307), НЕ ДОЛЖЕН возвращаться в ответе на последующий запрос, если только нет директив управления кэшем или другого заголовка (заголовков), которые явно разрешают это. Например, они включают следующее: заголовок Expires (раздел 14.21); директива "max-age", "s-maxage", "must- revalidate", "proxy-revalidate", "public" или "private" (раздел 14.9).
Более подробную информацию о HTTP-кэшировании в целом можно найти в статье Илья Григорик, HTTP-кэширование.