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

时间:2017-06-12 20:55:05

标签: javascript html apache caching 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是静态文件,我就无法使用链接中显示的两种缓存清除方法。
(因为每次重新生成.js文件时,我都必须更改HTML文件中的链接)

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

当我知道文件将始终以固定间隔更改时,我是否需要缓存清除?

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

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

1 个答案:

答案 0 :(得分:1)

试过这个?应该在.htaccess,httpd.conf和VirtualHost中工作(如果你从httpd.conf中包含它,通常放在httpd-vhosts.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>

来源:How to prevent http file caching in Apache httpd (MAMP)