Как предотвратить кэширование http-файлов в Apache httpd (MAMP)
Я разрабатываю одностраничное приложение Javascript в MAMP. Мои файлы шаблонов JavaScript и HTML кэшируются между запросами.
есть ли простой способ указать в MAMP, что я хочу предотвратить кэширование файлов http? Возможно, с ? Где я могу разместить .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 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 непосредственно с помощью заголовок ключевое слово.