为什么$ http.get返回304错误

我是新来的angular度和麻烦,总是工作的服务,直到它没有。 我的服务有以下电话。

this.getForms = function() { return $http.get("/forms"). then(function(response) { return response; }, function(response) { alert("Error finding forms."); }); }; 

刷新页面(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); } }); }); 

但是,而不是JSON我得到一个304错误,这表明数据在caching中可用。 但304响应头有一个空的数据string,所以它不会从caching中返回任何数据。

我的问题是

1)如果数据在caching中可用,为什么它调用我的服务器?

2)我怎么能告诉它不caching这个调用,所以页面可以正确更新表单?

编辑:看起来像Safari可能有一个潜在的问题。 也看到这个post。 NodeJS / express:caching和304状态码

你可能会误解304状态码的含义。 304不是错误; 这只是意味着你从服务器请求的资源没有改变。 响应的目的是不包含数据,因为它预计客户端将其caching在某处。

例如,Web浏览器将尝试caching图像,以便服务器不必再次通过networking发送,如果用户重新加载页面或稍后返回。 但是,浏览器需要一种方法来知道图像是否是最新的。 如果服务器发送304,则浏览器知道它可以继续在其caching中使用该副本。

在你的情况下,你应该实现某种caching来返回以前的响应,如果你收到一个304.或者,我相信你可以添加这些头到请求,强制它返回数据

  Cache-Control: no-cache, no-store, must-revalidate Pragma: no-cache Expires: 0