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

jha*_*amm 1 node.js express

我有express路线。我设置了 aheader和 acookie然后我重定向。

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

当我点击 时/testtoken已设置并可用。我没有一个header命名的TEST. 为什么我没有header?我如何header通过redirect

jfr*_*d00 5

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

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

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

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