有时 GET 返回 304 而不是 200

Tro*_*roy 5 node.js

我正在使用 node.js 和 mongodb。

我似乎有时会收到 200,而有时会收到 304 未修改。

router.get('/add-to-bag/:id', (req, res, next) => {
    req.session.bag.push(req.params.id);
    res.redirect('back');
    });
});
Run Code Online (Sandbox Code Playgroud)

Ami*_*ani 10

我不确定您使用什么堆栈来创建应用程序。看起来您正在使用 Express.js 进行路由。但是,我可以告诉您为什么会收到 304。

来自维基百科:

304 Not Modified (RFC 7232)
表示自请求头 If-Modified-Since 或 If-None-Match 指定的版本以来,资源尚未修改。在这种情况下,没有必要重新传输资源,因为客户端仍然有一个先前下载的副本。 [24]

304 的意思是“嘿,还记得我给你发送的最后一个答案吗?它没有改变”,因此你的浏览器会重放它从缓存中收到的最后一个响应,而不会发生数据传输。

您的数据,这意味着添加。但是由于包中的数据完全相同,因此服务器不会再次给出具有完全相同数据的 200,而是发出 304。

顺便说一句:您的 API 不是 Restful。我建议使用POST来创建新记录,而不是向GET不同的 URL发出 a 。我建议阅读 REST API 设计。一旦你掌握了它,它就非常简单。


Aur*_*ser 7

TL;DR:使用POST请求而不是GET请求。

GET请求应该用于获取东西。甲GET请求不应该影响所述应用(服务器的IE)的状态。

在您的情况下,将商品添加到购物袋显然是对服务器状态的修改

如果你不相信,看看这个答案

HTTP 协议中以这种方式定义了 GET。它应该是幂等和安全的。

如果您使用POST请求,它不仅会解决您的 304 问题,而且还会防止以后出现其他一些可能的错误。(而且会更正确。)