【问题标题】:Express JS redirect with headers带有标头的 Express JS 重定向
【发布时间】:2020-02-12 00:57:20
【问题描述】:

使用 express JS 我正在尝试将一些标头添加到我返回的重定向中 但是,我尝试的所有内容都只适用于响应标头,而不适用于重定向的请求标头。即,使用开发人员工具检查它时,我可以看到响应标头,但是在进行下一次调用时,我看不到请求标头

req.headers['x-custom-header'] = 'value'
res.setHeader('x-custom-header', 'value')    
res.redirect('example.com')

有人能解释一下 ExpressJS 上的响应和请求标头是如何工作的吗?

【问题讨论】:

    标签: node.js express http-headers


    【解决方案1】:

    重定向只是进行重定向。它告诉浏览器使用标准的非自定义标头转到该新位置。您无法在重定向后的下一个请求上设置自定义标头。浏览器根本不这样做。

    在重定向中传递某些类型的参数的常用方法是将它们放入重定向 URL 的查询字符串中,或​​者在某些情况下,将它们放入 cookie 中。在 cookie 中的查询字符串参数和数据这两种情况下,当浏览器向您发送重定向 URL 的请求时,您的服务器将可以使用这些参数。

    还可能值得重新审视一下为什么您首先要重定向,并且可能有不同的数据/url 流首先不需要重定向。我们必须更多地了解这个实际操作试图完成什么才能在那里提出建议。

    如果您的请求正在由 Ajax 调用处理,那么您可以对接收 Ajax 调用结果的代码进行编程以执行您希望它执行的任何操作(包括添加自定义标头),但如果是浏览器处理重定向并更改页面 URL 以加载新页面,它不会关注重定向响应上的自定义标头。

    谁能解释一下响应和请求标头在 ExpressJS 上是如何工作的?

    Express 正在按照您的要求进行操作。它将自定义标头附加到返回浏览器的响应中。浏览器不会将这些相同的标头附加到对重定向 URL 的下一个请求。所以,这不是 Express 的事情,而是浏览器的事情。

    【讨论】:

    • 我完全错误地解释了自己。我正在实现一个中间件(使用 express js)来处理 3rd 方应用程序和 AD 服务器之间的身份验证用户请求应用程序,这使用代理身份验证并调用中间件。中间件创建 SAML 请求并将其发送到 AD。 AD 回复授予/拒绝访问。中间件应附加一个标头,以便应用程序在身份验证成功的情况下识别用户。我试图在响应中添加标头。您认为有更好的方法吗?
    • @Lt. - 如果您希望身份验证“坚持”该用户未来的请求,那么您通常会使用加密的 cookie。然后,您的中间件还可以首先查找 cookie 的存在以指示先前的身份验证。如果您希望其他人提供帮助,请编辑您的问题以添加有关 AD、SAML 等的进一步说明...
    • 感谢您的回复。我已经发布了一个(希望得到更好的解释)帖子stackoverflow.com/questions/60197971/…
    • @Lt. - 我们不应该把这个问题/答案留在这里。如果您认为我在编写您的问题时回答了有关标题和重定向的原始问题,那么如果您接受此答案,我们可以完成它。否则,让我知道这里还需要什么来完成它。我已尽我所能对您的其他问题发表了评论。
    猜你喜欢
    • 2023-04-05
    • 2013-08-04
    • 2012-07-13
    • 2017-09-13
    • 2015-04-19
    • 1970-01-01
    • 1970-01-01
    • 2020-08-22
    • 2016-05-05
    相关资源
    最近更新 更多