Как избежать кеширования сгенерированного заданием файла на статическом сайте?
Мой проект в основном статический сайт, созданный с помощью Jekyll.
Большинство страниц являются просто информационными (следовательно, статическими), но люди могут зарегистрироваться по их адресу, поэтому есть страница регистрации, написанная на PHP.
Мой вопрос касается страницы с Google Map, с маркером для каждого из этих адресов.
Я использую этот подход, я только что внес несколько небольших изменений, таких как разделение данных (список координат GPS) в отдельный файл JavaScript, поэтому у меня в основном есть что-то вроде этого:
data.js
:
var locations = [
['Bondi Beach', -33.890542, 151.274856, 4],
['Coogee Beach', -33.923036, 151.259052, 5],
['Cronulla Beach', -34.028249, 151.157507, 3],
['Manly Beach', -33.80010128657071, 151.28747820854187, 2],
['Maroubra Beach', -33.950198, 151.259302, 1]
];
map.html
:
<!DOCTYPE html>
<html>
<head>
<title>address map</title>
</head>
<body>
<div id="map" style="height: 500px; width: 100%;"></div>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?key=xxxxxxxxxxxx"></script>
<!-- this should never be cached! -->
<script src="http://example.com/data.js"></script>
<script type="text/javascript">
/* a lot of JavaScript to show the map with markers */
</script>
</body>
</html>
map.html
статичен и (почти) никогда не меняется.data.js
(содержит адреса всех существующих регистраций) воссоздается cronjob один раз в день.
Как мне убедиться, что все всегда видят новейшую версию data.js
все время?
Я читал об уничтожении кэша, но думаю, что не смогу его использовать.
Пока map.html
является статическим файлом, я не могу использовать ни один из двух подходов очистки кэша, показанных в ссылке.
(потому что каждый раз, когда я воссоздаю файл.js, мне приходится менять ссылку в файле HTML)
Конечно, я мог бы также сгенерировать HTML-файл, но я бы хотел избежать сложности, если есть другое решение.
Нужно ли вообще уничтожать кеш, когда я знаю, что файл всегда будет меняться с фиксированным интервалом?
Сайт размещен на арендованном веб-пространстве LAMP, поэтому я могу сказать Apache НИКОГДА не кэшировать файл.js.
Но это заставит всех клиентов всегда перезагружать его, даже если он меняется только один раз в день.
Чтобы я мог просто установить время кэширования на 24 часа? (потому что файл создается заново один раз в день)
Неужели это так просто?
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>
Источник: Как предотвратить кэширование http-файлов в Apache httpd (MAMP)