如何避免在静态站点中缓存作业生成的文件?

How do I avoid caching of a job-generated file in a static site?

我的项目是使用 Jekyll 生成的主要静态站点。
大多数页面只是信息性的(因此是静态的),但是人们可以用他们的地址注册,所以有一个用 PHP.

写的注册页面

我的问题是关于一个带有 Google 地图的页面,每个地址都有一个标记。

我正在使用 this approach,我只是做了一些小改动,比如将数据(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

我读到 Cache busting,但我想我不能使用它。
只要 map.html 是静态文件,我就不能使用 link.
中显示的两种缓存清除方法中的任何一种 (因为每次我重新生成 .js 文件时,我都必须更改 HTML 文件中的 link)

当然我也可以重新生成 HTML 文件,但如果有其他解决方案,我想避免复杂性。

当我知道文件总是以固定的时间间隔更改时,我还需要清除缓存吗?

网站托管在租用的 LAMP 网站空间上,所以我可以告诉 Apache to NEVER cache the .js file
但这将导致所有客户端总是重新加载它,即使它每天只更改一次。

所以我可以将缓存时间设置为 24 小时吗? (因为文件每天重新生成一次)
真的那么简单吗?

试过这个吗?应该在 .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>

来源: