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")
我有一个非常简单的 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")