Подтвердить что ты не робот

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

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

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

4b9b3361

Ответ 1

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

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

Ответ 3

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

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

Ответ 4

Без 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.

Ответ 5

<FilesMatch "\.(js|css)$">
  ExpiresActive On
  ExpiresDefault A1
  Header append Cache-Control must-revalidate
</FilesMatch>

Ответ 6

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