在cloudflare上清除缓存是否也清除浏览器上的缓存?

时间:2015-01-05 02:56:17

标签: node.js caching express browser-cache cloudflare

我已经在heroku上部署了我的节点应用程序,并且我将cloudflare作为其前面的CDN。现在我的问题是,如果我的javascript发生了变化,如果我在cloudflare中清除缓存,是否会自动清除浏览器缓存? 我在expressjs服务器文件中进行了以下设置

if ('production' == process.env.NODE_ENV) {  //production
    var oneYear = 31557600000;
    app.use(express.static(__dirname + '/public', {maxAge: oneYear}));
} else { //development
    app.use(express.static(__dirname + '/public'));
    app.use(express.errorHandler());
}

如果对cloudflare的清除没有清除浏览器缓存,那么每次更改我的javascript或css文件时清除浏览器缓存的最佳策略是什么?

此致 赤丹

2 个答案:

答案 0 :(得分:0)

这是我最好的方法:

  1. 每次重新加载服务器时使用node的fs模块读取所有静态文件(或定期setTimeout)
  2. 读取每个文件并使用加密模块制作文件的md5哈希值
  3. 将哈希与最后存储的哈希进行比较并存储新哈希(使用任何类型的永久存储,如Mongo,MySQL,甚至是其他磁盘文件(我使用files方法,因为它不会弄乱应用程序逻辑,我的脚本在相同位置的同名文件中维护md5总和,只添加'.md5cache。'前缀。)
  4. 将哈希作为查询字符串附加到网络模板部分的文件路径中。
  5. 如果散列没有改变,浏览器会看到相同的文件名并从缓存中加载它。如果在名称中附加了一个不同的散列作为查询字符串,浏览器将向服务器查询新版本。

    Cloudflare可以选择禁用忽略查询字符串的行为,所以只需禁用它,你就可以了。

    我知道eTags解决方案,但我从未设法让它正常工作。我不认为node能够很好地使用eTags,但我可能错了。这不是我现在关注的问题,因为我发现我的方法设计得很好,而且我在每个项目中都将它用作库。

答案 1 :(得分:-1)

由于浏览器缓存,您可能仍希望在浏览器上进行硬刷新。