Как предотвратить кэширование 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>