node.js - 清除 cloudflare 上的缓存是否也会清除浏览器上的缓存?

标签 node.js caching express browser-cache cloudflare

我已经在heroku上部署了我的 Node 应用程序,并且我在它前面有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 文件时清除浏览器缓存的最佳策略是什么?

问候, 赤丹

最佳答案

这是我最好的方法:

  1. 每次服务器重新加载(或定期setTimeout)时,使用node的fs模块读取所有静态文件
  2. 读取每个文件并使用加密模块生成文件的 md5 哈希
  3. 将哈希值与上次存储的哈希值进行比较并存储新的哈希值(使用任何类型的永久存储,如 Mongo、MySQL,甚至其他磁盘文件(我使用文件方法,因为它不会扰乱应用程序逻辑,我的脚本将 md5 和保存在同一位置的同名文件中,仅添加“.md5cache.”前缀)
  4. 将哈希值作为查询字符串附加到网页模板部分的文件路径中。

如果哈希值没有改变,浏览器会看到相同的文件名并从缓存中加载它。如果名称中附加了不同的哈希值作为查询字符串,浏览器将向服务器查询新版本。

Cloudflare 有一个选项可以禁用忽略查询字符串的行为,因此只需禁用该选项即可。

我知道 eTags 解决方案,但我从未设法让它正常工作。我认为 Node 不能很好地与 eTags 配合使用,但我可能是错的。现在这不是我关心的问题,因为我发现我的方法设计得非常好,并且我在我所做的每个项目中都将它用作库。

关于node.js - 清除 cloudflare 上的缓存是否也会清除浏览器上的缓存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27772824/

相关文章:

javascript - Breeze 续集 - 警告续集版本已过时 3.x 有一个关键的安全修复

node.js - Nodejs 与 macOS : # Fatal error in , 第 0 行 - gatsby 开发

internet-explorer - 在 Internet Explorer 中第二次调用后 jQuery ajax 不工作

android - 如何从我们的 Android 应用程序中删除其他应用程序缓存?

javascript - Express:router.post 和 router.get 之间共享逻辑

javascript - node-sass-middleware 只提供一次 css 文件

node.js - 使用 Mongoose 批量更新

java - 是否有任何第三方java缓存可以提供对过期事件的控制?

特定于 session 的中间件的 Node.js 单元测试

node.js - Multer 不会以任何方式将图像保存在磁盘上