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

110

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

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

Теги:
http-headers
.htaccess
mamp

5 ответов

230
Лучший ответ

Пробовал это? Должен работать как в .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.

  • 2
    Спасибо, это очень хорошо работает в файле .htaccess. Я вижу параметры управления кэшем, когда проверяю заголовки и мои файлы отображаются с http 200 вместо 304 между запросами, как раз то, что мне было нужно.
  • 2
    Не забудьте добавить команду LoadModule. LoadModule headers_module lib/modules/mod_headers.so
Показать ещё 5 комментариев
5

На основе приведенного здесь примера: 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>
  • 0
    К сожалению, это не работает, когда я помещаю файл .htaccess в каталог моего проекта. Я не уверен, активен ли mod_expires.
  • 4
    @dmck: удалите разделы <IfModule mod_expires.c> и </IfModule> .. если mod_expires не включен, вы получите сообщение об ошибке вместо тихого игнорирования этих директив.
Показать ещё 1 комментарий
3

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

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

  • 3
    это о кэшировании PHP на стороне сервера, иначе OPCache. Вопрос в том, какие файлы кэшируются браузером и запрашиваются по HTTP.
2

Без 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, просто добавляя случайные параметры строки запроса, является базовым вариантом настройки no-cache для ajax jQuery-запроса, например. Браузер никогда не будет считать, что 2 URL-адреса, имеющие разные строки запросов, будут одинаковыми и никогда не будут использовать кешированную версию.

ИЗМЕНИТЬ

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

  • 0
    Спасибо, к сожалению, я не использую файлы PHP. Я посмотрю на mod_headers и установку mod_expires.
  • 0
    Как насчет предотвращения кеширования CSS-файлов?
-2

FWIW Мне пришлось перезапустить php-fpm до того, как изменение вступило в силу. Перезапуск Apache был недостаточным. Потянул мои волосы на некоторое время над этим.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню