如何解决NodeJS:使用 res.writeHead 重定向时缺少标头授权
我想将 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
的值,但它也丢失了。
解决方法
当您进行重定向时,浏览器不会保留身份验证标头和其他自定义标头等标头。浏览器向您在重定向响应中指定的 location
形成一个新请求,并使用默认标头(而不是重定向响应中的标头)构建该新请求。就好像用户将重定向的 URL 输入到浏览器 URL 栏中,浏览器创建了一个新的、对新 URL 的默认请求。
您需要通过 URL 路径、查询参数或 cookie 将信息传递给重定向的请求。查询参数和 URL 路径将始终出现在重定向请求中,如果 cookie 设置在重定向目标的域上,则 cookie 将出现。
当“new”请求到达另一个NodeJS服务器时,授权头丢失
重定向浏览器时不保留标头。浏览器创建一个带有默认标头的新请求,指向重定向中指定的 location
。您想要与新目标通信的任何信息都必须位于重定向 URL(路径或查询参数)或在目标域上设置的 cookie 中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。