Я ищу наилучшую возможную конфигурацию кеширования / истечения срока действия для моей конкретной ситуации.
Я понимаю, что некоторые сайты выступают за отключение etags: Header unset ETag, FileETag None
Я знаю, что мне следует использовать либо Expires, либо Cache-Control. Кроме того, я знаю, что мне следует использовать либо Last-modified, либо ETAG (Per ySlow docs).
Я унаследовал клиентский сервер, который использует в .htaccess следующее:
<FilesMatch "\.(ico|pdf|flv|jpg|jpeg|png|gif|js|css|swf|xml|txt|html|htm)$">
Header set Cache-Control "max-age=172800, public, must-revalidate"
</FilesMatch>
С этим сервером я не смогу полагаться на персонал для переименования изображений, css и js в веб-приложениях, поэтому я не хочу устанавливать срок действия в далеком будущем, не зная (с хорошей уверенностью), что «большинство / все "браузеры будут проверять, не изменилось ли содержимое. Я не хочу, чтобы кто-то позвонил мне и сказал, что веб-сайт не работает, потому что они заменили изображение, а оно не отображается.
Но я хочу максимально использовать преимущества кеширования и истечения срока действия, сохраняя при этом, что в основном все браузеры будут проверять сервер, чтобы узнать, не изменились ли компоненты.
У меня есть доступ как к файлу .htaccess, так и к файлу apache .conf, и это один сервер, контент не развертывается на нескольких серверах.
Какая конфигурация .htaccess или .conf была бы лучшей для меня для достижения моих целей для этого сервера клиентов?
Спасибо за вашу помощь
У вас должен быть включен eTag, хотя некоторые люди рекомендуют не использовать его при использовании балансировщиков нагрузки.
Для истечения срока действия и кеширования содержимого yoru вы можете использовать mod_expires и указать, какие ресурсы и их возраст. Или вы можете установить это httpd.conf
Заголовочный набор Cache-Control "max-age = 63072000, общедоступный"
Теперь, когда вы видите заголовки ответов, вы увидите Cache-Control с возрастом. Ставил на 2 года
> Cache-Control:max-age=63072000, public Connection:close Date:Thu, 22
> Oct 2015 17:09:31 GMT ETag:"2b7e6-a9777-523307081ff00"
> Server:Apache/2.2.3 Vary:Accept-Encoding,User-Agent
В основном убедитесь, что сервер отправляет Etag
и Last-Modified
заголовки (которые позволяют клиентам проверять, изменился ли ресурс, не загружая его на самом деле), и установить Expires
и Cache-Control: max-age
заголовки настолько далеко в будущем, насколько это возможно. Если статический контент будет изменен без переименования, лучшее, что вы можете сделать, - это настроить его так, чтобы он охватывал типичный сеанс просмотра (например, 15 минут).