Как предотвратить кеширование файлов http в Apache httpd (MAMP)

Я разрабатываю одностраничное приложение Javascript в MAMP. Мои файлы шаблонов JavaScript и HTML кэшируются между запросами.

Есть ли простой способ указать в MAMP, что я хочу предотвратить кеширование файлов http? Возможно с .htaccess файлом? Где мне разместить .htaccess или изменить виртуальный хост для MAMP на Mac?


person dmck    schedule 18.07.2012    source источник


Ответы (5)


Пробовали это? Должен работать как в .htaccess, httpd.conf, так и в VirtualHost (обычно помещается в httpd-vhosts.conf, если вы включили его из своего httpd.conf)

<filesMatch "\.(html|htm|js|css)$">
  FileETag None
  <ifModule mod_headers.c>
     Header unset ETag
     Header set Cache-Control "max-age=0, no-cache, no-store, must-revalidate"
     Header set Pragma "no-cache"
     Header set Expires "Wed, 11 Jan 1984 05:00:00 GMT"
  </ifModule>
</filesMatch>

100% запретить кеширование файлов

Это похоже на то, как в объявлениях Google используется заголовок Cache-Control: private, x-gzip-ok = ›для предотвращения кеширования рекламы прокси-серверами и клиентами.

Из http://www.askapache.com/htaccess/using-http-headers-with-htaccess.html.

И, при желании, добавьте расширение для файлов шаблонов, которые вы извлекаете, если вы используете для них расширение, отличное от .html.

person Charlie Rudenstål    schedule 30.07.2012
comment
Спасибо, это очень хорошо работает с файлом .htaccess. Я вижу параметры управления кешем, когда проверяю заголовки, и мои файлы отображаются с http 200 вместо 304 между запросами, как раз то, что мне нужно. - person dmck; 31.07.2012
comment
Не забудьте добавить команду LoadModule. LoadModule headers_module lib/modules/mod_headers.so - person Spenhouet; 22.09.2014
comment
Могу ли я применить этот заголовок ко всем типам файлов вместо того, чтобы определять расширения одно за другим? - person Thariq Nugrohotomo; 13.01.2017
comment
@ThariqNugrohotomo Да, это возможно! Это регулярное выражение, вы можете попробовать <filesMatch "\.+"> или <filesMatch ^> - person Charlie Rudenstål; 25.01.2017
comment
Я использую не MAMP, а Apache на веб-сервере. Мне также пришлось включить заголовки и модули с истекающим сроком действия в моей установке Apache, набрав заголовки sudo a2enmod и sudo a2enmod expires, а затем перезапустите sudo service apache2. Команды / теги LoadModule и IfModule не нужны - просто опустите части тега IfModule в квадратных скобках выше, но все же введите настройки заголовка между ними. - - person andruo11; 10.06.2018
comment
Кажется, не работает. Если я изменяю файл на сервере и обновляю страницу, ничего не происходит, но если я подожду 5 минут, все изменится. Есть какой-то серверный кеш, который сохраняется даже после перезапуска Apache. - person Aaron Franke; 06.01.2019
comment
Информацию об этой необычной дате Expires см. В разделе Почему WordPress использует 11 января 1984 года в качестве значения защиты от кеширования для заголовков Expires? и для очень похожей даты. в PHP ср. Почему истекает 1981 год? - person Speravir; 01.12.2019

На основе приведенного здесь примера: http://drupal.org/node/550488

Следующее, вероятно, будет работать в .htaccess

 <IfModule mod_expires.c>
   # Enable expirations.
   ExpiresActive On

   # Cache all files for 2 weeks after access (A).
   ExpiresDefault A1209600

  <FilesMatch (\.js|\.html)$>
     ExpiresActive Off
  </FilesMatch>
 </IfModule>
person Frank Farmer    schedule 18.07.2012
comment
К сожалению, это не работает, когда я помещаю файл .htaccess в каталог своего проекта. Я не уверен, что mod_expires активен. - person dmck; 24.07.2012
comment
@dmck: удалите разделы <IfModule mod_expires.c> и </IfModule> .. если mod_expires не включен, вы получите ошибку вместо того, чтобы эти директивы незаметно игнорировались. - person Stennie; 28.07.2012
comment
В каталоге проекта любая небольшая синтаксическая ошибка может вызвать ошибку 500. - person SDsolar; 27.10.2017

У меня была такая же проблема, но я нашел здесь хорошее решение: Прекратить кеширование PHP 5.5.3 в MAMP

В основном найдите файл php.ini и закомментируйте строки OPCache. Я надеюсь, что этот альтернативный ответ поможет и другим.

person acarito    schedule 02.01.2014
comment
Речь идет о кешировании PHP на стороне сервера, также известном как OPCache. Речь идет о файлах, кэшируемых браузером, которые запрашиваются по HTTP. - person Flion; 30.01.2016

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

<?php header('Expires: '.gmdate('D, d M Y H:i:s \G\M\T', time() + 3600)); ?>

(взято из: Ответ на переполнение стека от @brianegge, где также объясняется решение mod_expires)

Теперь это не будет работать с статическими файлами, такими как ваши файлы javascript. Что касается статических файлов, между браузером и исходным файлом есть только apache (без какого-либо модуля срока действия). Чтобы предотвратить кеширование файлов javascript, которое выполняется в вашем браузере, вы можете использовать случайный токен в конце URL-адреса js, что-то вроде ?rd=45642111, чтобы URL-адрес выглядел так:

<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

Если этот URL-адрес на странице сгенерирован файлом PHP, вы можете просто добавить случайную часть с помощью PHP. Этот способ рандомизации URL-адреса путем простого добавления случайных параметров строки запроса является базовой вещью, например, при настройке без кеширования запроса ajax jQuery. Браузер никогда не будет считать 2 URL-адреса с разными строками запроса одинаковыми и никогда не будет использовать кешированную версию.

ИЗМЕНИТЬ

Обратите внимание, что вы должны также протестировать mod_headers. Если у вас есть mod_headers, вы можете установить заголовки Expires напрямую с помощью ключевого слова Header.

person regilero    schedule 25.07.2012
comment
Спасибо, к сожалению, я не использую файлы PHP. Я изучу mod_headers и установлю mod_expires. - person dmck; 25.07.2012
comment
А как насчет предотвращения кеширования файлов CSS? - person Aaron Franke; 06.01.2019

person    schedule
comment
Это не очень качественный ответ. Постарайтесь подробно объяснить, каковы шаги для решения проблемы, указанной в OP. - person leopal; 03.09.2019