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


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

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

4 121

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 ads использует заголовок 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, которое выполняется в вашем браузере, вы можете использовать случайный маркер в конце JS url, что-то вроде ?rd=45642111, поэтому url выглядит так:
<script type="texte/javascript" src="my/url/myjs.js?rd=4221159546">

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

EDIT

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