簡體   English   中英

為什么$ http.get返回304錯誤

[英]Why is $http.get returning 304 error

我是一個有角度的新手,並且總是有效的服務有問題,直到它沒有。 我的服務有以下電話。

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);
        }
    });
});

但是,我得到的是304錯誤,而不是JSON,這表明數據在緩存中可用。 但304響應頭有一個空數據字符串,因此它不會從緩存中返回任何數據。

我的問題是

1)如果數據在緩存中可用,為什么要調用我的服務器?

2)如何告訴它不緩存此調用,以便頁面可以正確更新表單?

編輯:看起來Safari可能存在潛在問題。 也請看這篇文章。 NodeJS / express:緩存和304狀態代碼

您可能誤解304狀態代碼的含義。 304不是錯誤; 它只是意味着您從服務器請求的資源沒有改變。 響應意味着不包含數據,因為它希望客戶端在某處緩存它。

例如,Web瀏覽器將嘗試緩存圖像,以便服務器不必再次通過網絡發送它,如果用戶重新加載頁面或稍后返回該頁面。 但是,瀏覽器需要一種方法來了解圖像是否是最新的。 如果服務器發送304,則瀏覽器知道它可以繼續在其緩存中使用該副本。

在你的情況下,如果你收到304,你應該實現某種緩存來返回先前的響應。或者,我相信你可以將這些標題添加到請求中以強制它返回數據

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM