为什么我的标头未在重定向时设置?

2023-12-10

我有一个express路线。我设置了一个header and a cookie然后我重定向。

router.get("/callback", async (req, res) => {
    res.cookie("token", token, {
        maxAge: COOKIE_EXPIRATION_MILLISECONDS
    });
    res.header("TEST", "HEADER");
    res.redirect("/test");
});

当我击中时/test, token已设置且可用。我没有header named TEST。为什么我没有header?我该如何通过header通过redirect?


您的标头可能会与响应一起发送,但当浏览器实际遵循重定向并请求新 URL 时,您将看不到该标头。浏览器不会这样做。请记住,当你这样做时res.redirect(),它发送带有 302 状态和位置标头的响应。浏览器看到 302 并读取位置标头,然后向您的服务器发出新的浏览器请求以获取重定向的位置。先前响应中的标头不会添加到重定向位置的新请求中。

将此类数据传递给重定向请求的常用方法是:

  1. 将其放入查询字符串中将重定向的 URL 作为参数。当重定向的请求到来时,您的服务器将看到该查询字符串。
  2. 设置一个cookie。当重定向的请求到来时,您的服务器可以查看 cookie。
  3. 在服务器端会话对象中设置数据可以在下一个请求时访问。然后,当重定向的请求传入时,您的服务器可以查看会话。

只有上面的第一个选项(查询参数)是完全安全的,因为如果有来自同一用户的其他请求,其他选项可能会混淆数据属于哪个请求。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么我的标头未在重定向时设置? 的相关文章

随机推荐