在Node.js api中提供JSON响应时阻止缓存

时间:2016-09-09 05:43:44

标签: node.js express caching

我有一个移动应用程序,它会定期从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观察)。

enter image description here

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

1 个答案:

答案 0 :(得分:2)

首先,尝试禁用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();    
});