如何从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中的毫秒时间,以便时间戳始终是唯一的。