Express.js 如果重定向,路由每次都不起作用

Express.js route not working every time if redirecting

我有一个非常简单的 express.js 服务器,

app.get("/:var", (req, res) => {
    console.log(req.params.var);
    res.redirect(301, "/");
});

现在在我的浏览器上,如果我依次进入以下 urls

localhost:127/abc
localhost:127/abc
localhost:127/xyz
localhost:127/abc
localhost:127/xyz
localhost:127/xyz
localhost:127/abc

我在服务器的终端中得到以下输出

abc
xyz

出于某种原因,如果我删除 res.redirect(301, "/"),一切都按预期进行,我得到以下输出

abc
abc
xyz
abc
xyz
xyz
abc

即使我重新启动服务器,我也无法使用重新启动前使用的值。只有从浏览器中删除缓存后,我才能再次使用该值一次。

谁能解释一下这是怎么回事?我需要保留重定向并在重定向之前处理来自 url 的数据,希望客户端每次想要使用该站点时都不会清除浏览器缓存。

这里说:A 301 response is cacheable by default; i.e., unless otherwise indicated by the method definition or explicit cache controls - 参考:https://httpwg.org/specs/rfc7231.html#status.301

所以你看到的行为是正确的,你必须清除浏览器中的缓存才能看到新的响应。

上面的语句也给出了解决方案,可以设置缓存头告诉浏览器不要缓存响应。类似于:

res.set("cache-control","no-store")