Я установил кеширование в браузере всех изображений и файлов 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
(У меня включены настройки кеширования в настройках веб-инструментов.)
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.2014must-revalidate
актуально только в течение после истечения срока действия кеша (то есть послеmax-age
и / илиExpires
?), Так что кеш НЕ ДОЛЖЕН использовать запись после того, как он станет устаревшим. (из процитированного вами RFC). - person nachtigall   schedule 27.09.2014must-revalidate
- это директива, которую вы используете, чтобы сообщить клиенту, что он должен повторно проверять контент при каждом последующем запросе. В частности, в этом документе: требовать повторной проверки записи кэша при любом последующем использовании, а серверы ДОЛЖНЫ отправлять директиву must-revalidate тогда и только тогда, когда невозможность повторной проверки запроса на объект может привести к неправильной работе. Это действительно необходимо для ресурса, который вряд ли изменится? Если по какой-то причине клиент не хочет проводить повторную валидацию, действительно ли будет больно, если они будут использовать кэшированный ресурс? - person Sumurai8   schedule 27.09.2014must-revalidate
имеет значение только после кеширования устарело. - person nachtigall   schedule 28.09.2014