我遇到了一个问题,这个问题已经在stackoverflow和其他平台(1,2(上讨论过了,但在我的情况下,所提供的解决方案是不可能的。
我正试图通过POST请求和fetch((从BlueSnap(支付代理公司,有关具体操作的详细信息可以在这里找到(获得代币。请求正在工作,令牌正在通过响应中的Location标头发送给我我可以通过Chrome开发工具看到标题和所需的令牌,但我无法在JS代码中获取和使用它。response.headers对象为空,我尝试以任何方式获取response.header.Location都失败了
我试过这个:
console.log(response.headers.get('location'))
还有这个
for(const header of response.headers){
console.log(header);
}
但这些似乎都不起作用。
正如这里所讨论的,我试图添加这个:
'Access-Control-Expose-Headers': 'location'
添加到请求中的标题列表中,因此它符合CORS策略要求,但没有帮助。我认为这应该插入到服务器端,而不是客户端。我的猜测是,我不是第一个发现这个问题的人,但BlueSnap的客户支持部门对此没有解决方案。唯一可能的解决方案是在服务器上添加"访问控制导出标头":"位置">吗?
我的问题是:我如何才能获得这个http响应位置标头,它被防御性地发送到我的浏览器,但目前不能与我的JS代码一起使用
非常感谢您的时间和精力!
*我认为我对这个特定的问题不重要,但我正在与ReactJS 合作这个项目
你不能。
用于在web浏览器中从JavaScript发出HTTP请求的API(fetch
和XMLHttpRequest
(透明地遵循重定向。
response
对象将包含对location
标头中指定位置的请求的响应。您永远无法访问包含重定向指令的响应。
如果你阅读API的文档,它会说:
您使用服务器到服务器API调用为特定签出会话创建托管支付字段令牌。
…所以你一开始就不应该从客户端JS访问它。