2016-12-24 7 views
0

Я видел несколько противоречивых ответов по сети, и я пытаюсь понять это на фундаментальном уровне. Скажем, у меня есть изображение hotlinked (да, с разрешения) на моем сайте:Как кеширование браузера обрабатывает горячие ссылки + 204 ответа?

<img src="externalserver.com/catpic.png"> 
  1. Предполагая, что все заинтересованные стороны имеют кэш браузера включена, будет это изображение кэшировать (ака являются изображения с внешних сайтов даже кэшируемым) ?
  2. Если внешний сервер решает обслуживать другое изображение в том же месте, скажем, с перезаписью .htaccess, будет ли разбит кеш?
  3. Если внешний сервер решает выполнить одно и то же изображение с ?randomquerystring после этого, будет ли разбит кеш?
  4. Если внешний сервер отвечает кодом HTTP-статуса 204 вместо фактического обслуживания изображения, что происходит с кешированием?

Спасибо! Счастливые праздники.

ответ

1

Всё зависит.

  1. Пользовательский агент может кэшировать изображения. Независимо от того, будет ли он или не будет кэшировать изображения, зависит от того, как настроен сервер Cache-Control или Expires. Для получения дополнительной информации смотрите Cache-Control header page на MDN.
  2. Пользовательский агент может иметь или не иметь свежий ресурс. Это зависит от заголовка Cache-Control, Expires заголовка, является ли ресурс устаревшим, использует ли сервер валидатор и выполняет ли он слабую или сильную проверку. Для получения дополнительной информации смотрите HTTP conditional requests page на MDN.
  3. Сервер не обслуживает ресурс ?randomquerystring. Скорее клиент может запросить ресурс с помощью ?randomquerystring. ?randomquerystring называется загрузчиком кеша. Пользовательский агент выполнит новый запрос, но я слышал, что некоторые прокси могут игнорировать кеш-память этого типа и возвращать кешированный ответ.
  4. Пользовательский агент, возможно, будет уважать Cache-Control и Expires. Соответствующий отрывок из RFC 2616:

    Ответ, полученный с любым другим кодом состояния (например, коды состояния 302 и 307), НЕ ДОЛЖЕН быть возвращен в ответ на последующий запрос, если нет директивы управления кешем или другой заголовка (ы), которые явно разрешают это. Например, они включают : заголовок Expires (раздел 14.21); «max-age», «s-maxage», «must-revalidate», «proxy-revalidate», «public» или «частная» директива по управлению кешем (раздел 14.9).

Для получения дополнительной информации о кэшировании HTTP в общей проверки HTTP Caching статьи Илья Григорик.