Saf*_*ive 1 javascript safari caching node.js angularjs
我是 Angular 的新手,在使用一直有效的服务时遇到了麻烦,直到它不起作用。我的服务有以下调用。
this.getForms = function() {
return $http.get("/forms").
then(function(response) {
return response;
}, function(response) {
alert("Error finding forms.");
});
};
Run Code Online (Sandbox Code Playgroud)
当刷新页面(safari)时,触发 getForms,调用 $http.get,我的 Node.js/Express 服务器表单端点正确返回表单数据。
app.get("/forms", function (req, res) {
Form.find({}, function (err, docs) {
if (err) {
server.handleError(res, err.message, "Failed to get forms.");
} else {
res.status(200).json(docs);
}
});
});
Run Code Online (Sandbox Code Playgroud)
但我得到的不是 JSON,而是 304 错误,这表明数据在缓存中可用。但 304 响应标头有一个空数据字符串,因此它不会从缓存返回任何数据。
我的问题是
1)如果数据在缓存中可用,为什么它会调用我的服务器?
2)我如何告诉它不缓存此调用,以便页面可以正确更新表单?
小智 5
编辑: Safari 似乎可能存在潜在问题。也请参阅这篇文章。NodeJS/express:缓存和 304 状态码
您可能误解了 304 状态代码的含义。304不是一个错误;这只是意味着您从服务器请求的资源没有改变。响应不包含数据,因为它期望客户端已将其缓存在某处。
例如,网络浏览器将尝试缓存图像,以便在用户重新加载页面或稍后返回页面时,服务器不必再次通过网络发送该图像。然而,浏览器需要一种方法来知道图像是否是最新的。如果服务器发送 304,浏览器就知道它可以继续使用缓存中的副本。
在您的情况下,如果收到 304,您应该实现某种缓存以返回先前的响应。或者,我相信您可以将这些标头添加到请求中以强制其返回数据
Cache-Control: no-cache, no-store, must-revalidate
Pragma: no-cache
Expires: 0
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8369 次 |
| 最近记录: |