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

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

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

4 ответа

Решение

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

На основании примера здесь: 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>

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

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

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

РЕДАКТИРОВАТЬ

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

<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>
Другие вопросы по тегам