我使用節點並表示iOS應用程序的後端。數據存儲在SQL Server數據庫中,所以iOS應用程序查詢服務器,服務器查詢數據庫,服務器接收數據庫響應,然後將響應轉發給iOS應用程序。我試圖找出緩存如何工作。我服務了很多靜態內容 - 例如博客文章。所以我打算使用etags,但我不確定它應該如何工作。我提出請求,獲取內容並在客戶端緩存響應。好。然後,我在之後的「If-None-Match」標題中存儲前一個響應的etag。那又怎麼樣?如何使用Express.js返回304未修改的狀態?
Express.js是否自動處理?它似乎並沒有 - 我無法讓它產生一個304響應。如果我在發送響應之前嘗試檢查響應頭,我會得到空值,所以在發送響應之前我無法獲得響應的etag。那麼我該如何將請求etag與服務器將發回的內容的etag進行比較?我是否應該使用自定義生成的etags並將其緩存在服務器上,然後將請求etags與此緩存進行比較?
下面是我設置的一個非常簡單的路線來測試這個,沒有涉及數據庫。我只是向服務器發送一個數字,然後它返回正方形。如果我發送帶有etag的請求到相同的URL,我將得到相同的響應。我可以檢查請求的'If-None-Match'標題,但是爲了確定是否應該發送304而不是200狀態,我該如何比較它?
router.use("/square/:testId", function(req, res) {
var obj = {};
obj["testId"] = req.params.testId;
obj["result"] = req.params.testId * req.params.testId;
res.setHeader('Cache-Control', 'public, max-age=5');
var h2 = JSON.stringify(res.headers,null,2);
console.log("The response headers: " + h2);
//Prints null
res.status(200).send(obj);
});