我在 S3 中托管一个静态网站并使用 Cloudfront 来缓存文件。我基本上有 3 个带有以下标题的文件:
- index.html(缓存控制:无缓存)
- app.js (缓存控制: max-age=63072000, public)
- style.css (缓存控制: max-age=63072000, public)
我的 html 文件使用每次更新我的 css 或 js 文件时都会更新的查询字符串参数。我已经将 s3 配置为传递这些参数,并且我已经验证它可以使缓存的资源无效。我的 index.html 文件看起来像这样:
<html>
<head>
...
<link rel="stylesheet" href="app.css?v=14113e2c764">
</head>
<body>
...
<script src="app.js?v=14113e2c764"></script>
</body>
</html>
当我整天推送更新时,它似乎工作得很好,但是当我第二天早上来推送我的下一个更改时,index.html 文件已经过时了。它没有正确的 ?v= 参数,而是旧的!修复它的唯一方法是手动使 html 文件无效。然后在一天的剩余时间里一切正常。第二天我又遇到了同样的问题。
这里发生了什么?