【问题标题】:Why is my header not being set on redirect?为什么我的标头没有设置为重定向?
【发布时间】:2017-09-09 17:56:28
【问题描述】:

我有一个express 路由。我设置了headercookie,然后我重定向。

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

当我点击/test 时,token 已设置并可用。我没有名为TESTheader。为什么我没有header?如何通过redirect 传递header

【问题讨论】:

  • 您不能指示客户端在后续请求中传递特定标头。

标签: node.js express


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-12
    • 2012-07-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    相关资源
    最近更新 更多