Apache кэш-контроль без проверки - PullRequest
0 голосов
/ 11 марта 2012

как я могу сделать так, чтобы мой браузер кэшировал ресурс, такой как изображение, с помощью команды, чтобы запретить браузеру проверять наличие обновленных файлов? У меня есть статические ресурсы, которые никогда не изменятся, и бесполезно просить у сервера обновления.

1 Ответ

1 голос
/ 11 марта 2012

Мой хост не объявляет файлы favicon.ico как image / x-icon, поэтому мне нужно следующее

AddType image/x-icon .ico

Вы устанавливаете срок действия следующим образом, по одному на тип. Вот пример набора (вы можете использовать день, неделю, месяц и т. Д.:

ExpiresActive On
ExpiresByType text/css        "access plus 1 month"
ExpiresByType text/javascript "access plus 1 month"
ExpiresByType image/gif       "access plus 1 week"
ExpiresByType image/png       "access plus 1 week"
ExpiresByType image/x-icon    "access plus 1 week"

Возможно, вы также захотите установить заголовок Cache

<FilesMatch "\.(css|js|gif|jpe?g|png|ico)$">
   Header add "Cache-Control" "public, max-age=604800"
</FilesMatch>

Расширение по мере необходимости для других типов. 604800 = 1 неделя в секундах. Посчитай, если хочешь это изменить.

Как браузер использует эти заголовки

RFC 2616 (HTTP / 1.1) содержит общие рекомендации о том, когда и как браузеры используют эту информацию. Чтобы получить представление о том, как это работает на практике, используйте вкладку «Сеть» в представлении разработчика Google Chrome (Ctl + Shft + I). (Большинство других основных браузеров предлагают эквивалентные инструменты, хотя, возможно, через пакет расширений.) Однако это рекомендуется, поскольку пользователи могут по своему усмотрению игнорировать это, хотя в своих настройках браузера они всегда выбирают проверку сервера или проверку сервера один раз за сеанс. IIRC, в некоторых ранних браузерах (например, MSIE pre 8) в качестве опции по умолчанию использовалась проверка один раз за сеанс.

Также, если вы решите обновить страницу, большинство браузеров выполнит повторную проверку всех ресурсов на странице, используя If-Modified-Since и If-None-Match , поэтому вам нужно повторно посетить ссылку или повторно ввести URI, чтобы увидеть обычное действие повторного использования. Точно так же большинство из них будет считать Shift + refresh «принудительным обновлением», то есть переговоры не проводятся.

Когда я администрировал пользовательские форумы OpenOffice.orf, я однажды проанализировал журналы доступа за полный месяц, чтобы увидеть, сколько кеширования выполнялось с помощью простого алгоритма, чтобы определить, когда следует повторно кэшировать повторно используемые ресурсы, но где их по-прежнему выбирает клиент. браузеры. Я был удивлен, обнаружив, что эта доля кеша превысила 30% (из-за пользовательских настроек браузера) Однако большинство пользователей получают доступ к этим пользовательским форумам в качестве базы знаний, используя Google, чтобы спросить о конкретной проблеме, а затем просмотреть несколько страниц, чтобы никогда не вернуться в течение месяца. Когда я ограничил себя модераторскими IP-адресами (которые в основном используют Ff или Chrome в качестве браузера), этот показатель увеличился до ~ 95%.

Таким образом, браузеры клиентов делают используют эту информацию, но не так, как вы ожидаете. Я также обсуждаю здесь , что браузеры также могут кэшировать ресурсы, когда вы явно не запрашиваете это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...