为什么从nodejs服务器重定向只对第一个请求有效



我在express服务器中有以下设置

app.get("/oauth2", (req, res) => {
console.log("PLEASE WORK");
res.redirect(301, "https://google.com/");
});

在向服务器发出第一个请求时,它工作良好,这意味着";请工作";将被记录并重定向正常工作并转到谷歌,但如果我在oauth2再次请求服务器;请帮忙"没有被记录,但它仍然重定向到谷歌,如果我将url更改为";facebook.com";,它仍然重定向到谷歌。如果我完全删除代码并保存文件,即使代码不存在,它仍然会重定向到谷歌。浏览器会缓存它吗?我试着重新启动服务器,重新启动浏览器,但我不明白。我试过使用http服务器以及

res.writeHead(308, {Location:"https://facebook.com/"});
res.end();

同样的事情也会发生。

为什么从nodejs服务器重定向只能在第一个请求时工作?

实际上,问题的标题并没有真正描述发生了什么。重定向第二次工作得很好(客户端被成功重定向到资源的新位置(。你真正想问的是,为什么请求没有第二次到达你的服务器。

301状态的全部原因是;"永久移动";。因此,客户端应该可以记住这一点或缓存它,而无需再次与服务器进行检查。

302重定向被认为更像是临时重定向,并且客户端不能假设原始URL将总是被重定向到该新目标,因此如果稍后需要该资源,则客户端应该重新请求原始URL。

308类似于301(永久重定向(。我不知道308的完整历史,但添加它似乎是为了解决301的一些问题,其中有时到301的POST会重定向到GET到新的资源位置,而308在进行重定向时保留HTTP谓词。关于这个细微差别的更多信息,请点击这里What';HTTP 301和308状态代码之间有什么区别?。

所以,是的,你的浏览器显然正在缓存301和308的结果,并且它被允许这样做

而且,如果重定向位置发生更改(请使用302(,则服务器不应使用301或308 http状态。

相关内容

最新更新