如何从http中删除caching获得对js节点的请求

我正在研究节点js的Web应用程序,我正在做一个http获取请求,该地址的数据库和通过查询获取数据。

http get请求在chrome上工作正常,但是在IE上每个get都不会更新,而是从某种caching中返回。 这使得db查询的结果不被更新(因为它是从chache中获取的)。

我可以看到,它正在IE中从F12开发工具的chacheforms中获取:

在这里输入图像说明

我的代码如下。 我知道我应该添加如下内容:

res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); 

我的要求,但我认为我可能把这一行在错误的地方,因为得到reuqest仍然从chache采取,给我不好的结果… … –

客户

 $http.get('/users') .success(function(data) { $scope.usersNumber = data.length; }) .error(function(data) { console.log('Error: ' + data); }); 

服务器

 app.get('/users', function(req, res){ get_user(req, res); }); var get_user= function(req, res){ var query= User_session.find(); query.exec( function(err, docs){ res.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); res.json(docs); //mongoose.connection.close(); }); } 

尝试添加最大年龄到您的标题:

 Cache-Control:private, no-cache, no-store, must-revalidate, max-age=0 Pragma:no-cache 

您从开发人员工具捕获的响应显示响应是从caching中选取的。 caching的响应中有一个expires头,该头指定了响应可以从caching中获取的持续时间,并且不被视为陈旧的。

你会想包括一个no-cache指令来进行端到端的重载

该请求包含“无caching”caching控制指令,或者为了与HTTP / 1.0客户端兼容,“Pragma:no-cache”。 字段名不能包含在请求中的no-cache指令中。 响应这样的请求时,服务器不能使用caching副本。

参考: https : //www.w3.org/Protocols/rfc2616/rfc2616-sec14.html

您也可以试试这个另一个解决scheme来强制客户端重新加载。 将一个查询string参数添加到您的url。 例如:如果你有一个/用户,而不是使URL为/用户?uniqstamp = <时间戳>

您的浏览器始终认为包含查询string的整个path都会生成一个URL。 所以你总是会得到200新鲜的服务。 确保您使用的时间戳是来自JavaScript中的毫秒时间,以便时间戳始终是唯一的。