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

Javascript 为什么$http.get返回304错误,javascript,angularjs,node.js,caching,safari,Javascript,Angularjs,Node.js,Caching,Safari,我是个新手,在一项一直有效的服务上遇到了麻烦,直到它不起作用。我的服务电话如下 this.getForms = function() { return $http.get("/forms"). then(function(response) { return response; }, function(response) { alert("Error finding forms."); }); }; 刷新页面时(safari)触发

我是个新手,在一项一直有效的服务上遇到了麻烦,直到它不起作用。我的服务电话如下

this.getForms = function() {
    return $http.get("/forms").
    then(function(response) {
        return response;
    }, function(response) {
        alert("Error finding forms.");
    });
};
刷新页面时(safari)触发getForms,调用$http.get,my Node.js/Express server forms端点将正确返回表单数据

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错误,这表明数据在缓存中可用。但是304响应头有一个空数据字符串,因此它不会从缓存返回任何数据

我的问题是

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


2) 我如何告诉它不要缓存此调用,以便页面可以正确使用表单进行更新?

编辑:看起来Safari可能存在潜在问题。也可以看到这篇文章

您可能误解了304状态代码的含义。304不是一个错误;这只意味着您从服务器请求的资源没有更改。响应不包含数据,因为它希望客户机将其缓存到某个地方

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

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

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

编辑:看起来Safari可能存在潜在问题。也可以看到这篇文章

您可能误解了304状态代码的含义。304不是一个错误;这只意味着您从服务器请求的资源没有更改。响应不包含数据,因为它希望客户机将其缓存到某个地方

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

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

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