【问题标题】:NodeJS: header authorization missing from redirect using res.writeHeadNodeJS:使用 res.writeHead 的重定向缺少标头授权
【发布时间】:2021-09-04 10:36:53
【问题描述】:

我想将一个 HTTP 请求重定向到另一个 NodeJS 服务器。 我正在使用res.writeHead 来重定向请求。

代码替代 1:

   let headers = Object.assign({},req.headers)
   await Object.entries(headers).forEach(async ([header,value]) => {
         await res.setHeader(header,value)
   })
   await res.setHeader('Location',ENV_CONFIG.ENV_US_URL + req.url)
   res.writeHead( 307 );
   res.end();

代码替代 2:

   let headers = Object.assign({},req.headers)
   headers['Location'] = ENV_CONFIG.ENV_US_URL + req.url
   res.writeHead( 307, {...headers} );
   res.end();

代码替代 3:

   let headers = Object.assign({},req.headers)
   res.writeHead( 307, {'Location': ENV_CONFIG.ENV_US_URL + req.url,...headers} );
   res.end();

三种备选方案提供相同的结果。 res headers 在发送到其他 NodeJS 服务器之前确实包含 authorization 标头。

当“新”请求到达另一个 NodeJS 服务器时,authorization 标头丢失

请求标头DO包含authorization标头。

为什么authorization 标头会掉在那里?

顺便说一句。我尝试在某些 custom 标头中设置 authorization header 的值,它也丢失了。

【问题讨论】:

    标签: node.js redirect http-headers httprequest response-headers


    【解决方案1】:

    当您进行重定向时,浏览器不会保留身份验证标头和其他自定义标头等标头。浏览器对您在重定向响应中指定的location 形成一个新请求,并使用默认标头而不是重定向响应中的标头构建该新请求。就好像用户在浏览器的 URL 栏中输入了重定向的 URL,并且浏览器创建了一个新的、默认的对该新 URL 的请求。

    您需要通过 URL 路径、查询参数或 cookie 将信息传递给重定向的请求。查询参数和 URL 路径将始终存在于重定向的请求中,如果 cookie 设置在重定向目标的域上,则将存在 cookie。

    当“新”请求到达其他 NodeJS 服务器时,授权标头丢失

    重定向浏览器时不保留标题。浏览器创建一个带有默认标头的新请求,指向重定向中指定的location。您要与新目标通信的任何信息都必须在重定向 URL(路径或查询参数)中或在目标域上设置的 cookie 中。

    【讨论】:

      猜你喜欢
      • 2012-10-27
      • 2016-07-15
      • 2021-06-23
      • 1970-01-01
      • 1970-01-01
      • 2023-02-01
      • 2019-06-17
      • 1970-01-01
      相关资源
      最近更新 更多