Статические файлы CSS / JS с заголовками Expires и Cache-Control не кэшируются в браузере.

Я установил кеширование в браузере всех изображений и файлов css / js. Тем не менее, когда я смотрю инструменты веб-разработчика браузера под сетевой панелью, мне кажется, что каждый кешированный файл тем не менее извлекается с сервера.

Это то, что у меня есть в моем .htaccess:

<ifModule mod_headers.c>
<ifModule mod_expires.c>
  # images for 1 hour
  <filesMatch "\.(jpeg|jpg|png|gif|flv|pdf|swf)$">
    ExpiresActive On
    ExpiresDefault "access plus 1 hours"
    Header set Cache-Control "public, max-age=3600, must-revalidate"
  </filesMatch>
  # CSS and js for longer
  <filesMatch "\.(ico|css|js|eot|ttf|ttc|otf|woff)$">
    ExpiresActive On
    ExpiresDefault "access plus 7 days"
    Header set Cache-Control "public, max-age=604800, must-revalidate"
  </filesMatch>
</ifModule>
</ifModule>
# do not use ETag
FileETag None

Для файла CSS, например https://www.fiveroasters.de/wp-includes/css/dashicons.min.css?ver=3.9.2 в результате получаются следующие заголовки:

Accept-Ranges   bytes, bytes
Age 0
Cache-Control   public, max-age=604800, must-revalidate
Connection  keep-alive
Content-Encoding    gzip
Content-Length  24803
Content-Type    text/css
Date    Fri, 26 Sep 2014 21:26:10 GMT
Expires Fri, 03 Oct 2014 21:26:10 GMT
Last-Modified   Tue, 27 May 2014 09:24:09 GMT
Server  Apache/2.4.10
Vary    Accept-Encoding
Via 1.1 varnish

Мне это кажется правильным, но браузер не кеширует его, но каждый запрос по-прежнему вызывает полную загрузку (http-код 200). То же самое для JS, изображений и т. Д. Почему? Вы можете сами заглянуть на https://www.fiveroasters.de

(У меня включены настройки кеширования в настройках веб-инструментов.)


person nachtigall    schedule 26.09.2014    source источник
comment
Предположительно в вашем браузере включено кеширование ...?   -  person i alarmed alien    schedule 27.09.2014
comment
Конечно. Кешируется ли он в вашем браузере?   -  person nachtigall    schedule 27.09.2014
comment
Пытаясь воссоздать это в Chrome, я замечаю, что при загрузке новой страницы она отправляет заголовок Pragma: no-cache вместо If-Modified-Since, поэтому сервер правильно отвечает 200 и страницей. Если вы обновляете страницу, она загружается из кеша, это верно для любой ранее загруженной страницы. Это может быть вызвано директивой must-revalidate или просто принципом работы Chrome. w3.org/Protocols/rfc2616/rfc2616-sec14.html# сек14.9.4   -  person Sumurai8    schedule 27.09.2014
comment
@ Sumurai8 Я думаю, что must-revalidate актуально только в течение после истечения срока действия кеша (то есть после max-age и / или Expires?), Так что кеш НЕ ДОЛЖЕН использовать запись после того, как он станет устаревшим. (из процитированного вами RFC).   -  person nachtigall    schedule 27.09.2014
comment
Нет. must-revalidate - это директива, которую вы используете, чтобы сообщить клиенту, что он должен повторно проверять контент при каждом последующем запросе. В частности, в этом документе: требовать повторной проверки записи кэша при любом последующем использовании, а серверы ДОЛЖНЫ отправлять директиву must-revalidate тогда и только тогда, когда невозможность повторной проверки запроса на объект может привести к неправильной работе. Это действительно необходимо для ресурса, который вряд ли изменится? Если по какой-то причине клиент не хочет проводить повторную валидацию, действительно ли будет больно, если они будут использовать кэшированный ресурс?   -  person Sumurai8    schedule 27.09.2014
comment
@ Sumurai8: Я уже думал об этом, но в этом SO-ответе (первая часть) говорится, что must-revalidate имеет значение только после кеширования устарело.   -  person nachtigall    schedule 28.09.2014
comment
Думаю, дизайнерский документ неоднозначен (по крайней мере, как я его читал). Вы можете попробовать без него и посмотреть, как отреагирует хром. Обязательно снимите флажок «отключить кеш» в верхней части консоли разработчика.   -  person Sumurai8    schedule 28.09.2014
comment
Хорошо, похоже, теперь работает, когда не используется обязательная повторная проверка. Спасибо!   -  person nachtigall    schedule 28.09.2014