确保所有用户获得新鲜的index.html而不是缓存的index.html的最佳方法是什么?
因此,上周我试图使用户缓存单页应用程序的js和css捆绑包。我在server.js文件中添加了最长期限:
app.use(express.static('build', { maxAge: '365d' }));
问题在于index.html文件也位于build文件夹中。这意味着它已经被客户端缓存了365天...
因此,即使我在js和css捆绑软件上都有缓存破坏功能,但index.html文件始终是相同的,因此由于旧哈希,捆绑软件仍保持不变。
我现在将服务器改为使用Etag:
app.use(express.static('build', { etag: true }));
这很好用。
问题是我将其推送到了生产环境,现在所有用户都拥有一个过时的index.html。
我使用Node Express和AWS Application Load Balancer。
发送index.html的端点如下:
app.get('*', (request, response) => {
response.sendFile(path.join(__dirname, 'build/index.html'));
});
有人有聪明的解决方案吗?
我已经研究过使用这样的php文件:https://github.com/facebook/create-react-app/issues/1910。那是最好的解决方案吗?
答案 0 :(得分:0)
使用index.html路由时可以发送标头不缓存
例如:
app.get('/', (request, response) => {
response.header('Cache-Control', 'private, no-cache, no-store, must-revalidate');
response.header('Expires', '-1');
response.header('Pragma', 'no-cache');
response.sendFile(path.join(__dirname, 'build/index.html'));
});