Как избежать кеширования сгенерированного заданием файла на статическом сайте?

Мой проект в основном статический сайт, созданный с помощью 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)

Другие вопросы по тегам