【问题标题】:Prevent cache when serving a JSON response in Node.js api在 Node.js api 中提供 JSON 响应时防止缓存
【发布时间】:2016-09-09 05:43:43
【问题描述】:

我有一个移动应用程序,它会定期从 Node.js 服务器中提取 JSON 文件。

JSON 响应是使用随机值动态生成的。它根本不应该被缓存。

我试图阻止缓存:

app.get('/important.json', function(req, res) {
        res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");
        res.setHeader("Pragma", "no-cache");
        res.setHeader("Expires", 0);
        res.json(...);
});

但是,当移动应用重新加载 json 时,它仍然收到来自服务器的 304 Not Modified 响应(从 Fiddler 观察到)。

有人可以建议反缓存是否正确完成?是因为etag吗?如果 etag 是问题所在,我可以专门为此 api/endpoint 禁用 etag 吗?

【问题讨论】:

  • 我在一个简单的快速服务器上试过这个,当我多次刷新页面时我得到 200,所以它对我有用。如果我注释掉 res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); res.setHeader("Pragma", "no-cache"); res.setHeader("Expires", 0); 我得到 304 not modified status 所以你正确使用了缓存控件,它可能与 fiddler 有关,在 chrome 上试试
  • etag 很好,即使您告诉客户端不要缓存它,etag 也不会因后续请求而更改。仅当您发送的内容发生更改时,etag 才会更改,无论哪种方式,您是否正确设置了您在此处所做的缓存控件都没有关系

标签: node.js express caching


【解决方案1】:

首先,尝试禁用etag:

app.set('etag', false);

其次,您可以拦截向节点发出的所有请求,中间件位于所有其他处理程序的顶部。

app.use(function(req, res, next) {
  //delete all headers related to cache
  req.headers['if-none-match'] = '';
  req.headers['if-modified-since'] = '';
  next();    
});

【讨论】:

    猜你喜欢
    • 2018-02-03
    • 2015-07-31
    • 2014-11-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-16
    • 2014-11-11
    • 2012-04-13
    相关资源
    最近更新 更多