【问题标题】:Does purging cache on cloudflare also purge cache on browser?清除 cloudflare 上的缓存是否也会清除浏览器上的缓存?
【发布时间】:2015-01-05 02:56:16
【问题描述】:

我已经在 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 文件时清除浏览器缓存的最佳策略是什么?

问候, 赤胆

【问题讨论】:

  • 各位,请帮帮我。如果我将 maxAge 设置为 1 毫秒怎么办,因此浏览器将始终检查是否有新内容。这会使 cloudflare 的缓存过期吗?如果是,那么 cloudflare 将提供新内容。如果否,则内容没有变化,因此不会有缓存交换。我的假设正确吗?

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


【解决方案1】:

这是我最好的方法:

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 但是我该如何以编程方式进行,显然我无法控制用户行为并要求用户进行硬刷新,必须有某种方式告诉缓存已过期并且浏览器必须下载新的缓存。
    • 如果我将 maxAge 设置为 1 毫秒会怎样,因此浏览器将始终检查是否有新内容。这会使 cloudflare 的缓存过期吗?如果是,那么 cloudflare 将提供新内容。如果否,则内容没有变化,因此不会有缓存交换。我的假设正确吗? ——
    猜你喜欢
    • 1970-01-01
    • 2021-02-05
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    相关资源
    最近更新 更多