为什么从 nodejs 服务器重定向只在第一次请求时起作用?

Why redirect from nodejs server work only on the first request?

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

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

在对服务器的第一次请求中它工作正常,这意味着“请工作”将被记录并且重定向正常工作并转到 google,但是如果我在 oauth2 再次请求服务器,“请HELP”没有记录,但它仍然重定向到 google,如果我将 url 更改为“facebook.com”,它仍然重定向到 google。如果我完全删除代码并保存文件,即使代码不存在,它仍会重定向到 google。浏览器是否缓存它?我试过重新启动服务器,重新启动浏览器,我不明白。 我也试过使用 http 服务器

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

完全相同的事情发生了。

Why redirect from nodejs server work only on the first request?

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

301 状态的全部原因是资源已“永久移动”。因此,客户端应该可以记住它或缓存它而无需再次检查服务器。

302 重定向更多地被认为是临时重定向,客户端不能假设原始 URL 将始终重定向到新目标,因此客户端应该 re-request 原始 [=26] =] 如果稍后需要该资源。

308 类似于 301(永久重定向)。我不知道 308 的完整历史,但似乎添加它是为了解决 301 的一些问题,有时 POST 到 301 会重定向到 GET 到新的资源位置,而 308进行重定向时保留 HTTP 动词。有关此细微差别的更多信息,请点击此处 What's the difference between HTTP 301 and 308 status codes?

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

而且,如果重定向位置永远改变(请改用 302),您的服务器永远不应使用 301 或 308 HTTP 状态。