【问题标题】:Can't accses fetch() response location header in JS无法在 JS 中访问 fetch() 响应位置标头
【发布时间】:2021-01-22 06:19:03
【问题描述】:

我在 stackoverflow 和其他平台 (1,2) 上已经讨论过一个问题,但在我的情况下提供的解决方案是不可能的。

我正在尝试通过 POST 请求和 fetch() 从 BlueSnap(支付处理公司,details about the exact action can be found here)获取令牌。请求正在运行,并且令牌正在通过响应中的 Location 标头发送给我。 我可以通过 Chrome 开发工具看到标题和所需的令牌,但我无法在我的 JS 代码中获取和使用它。 response.headers 对象为空,我尝试访问 response.header.Location 的任何方式都失败了。

我试过这个:

console.log(response.headers.get('location'))

还有这个

for(const header of response.headers){
  console.log(header);
}

但这些似乎都不起作用。

As disscused here我尝试添加这个:

'Access-Control-Expose-Headers': 'location'

到我的请求中的标题列表,所以它适合CORS policy requiremnts,但它没有帮助。我认为这应该插入服务器端,而不是客户端。我的猜测是我不是第一个遇到这个问题的人,但是 BlueSnap 的客户支持没有解决这个问题。唯一可能的解决方案是在服务器上添加 'Access-Control-Expose-Headers': 'location' 吗?

我的问题是:我如何才能访问这个 http 响应位置标头,该标头已明确发送到我的浏览器,但目前无法与我的 JS 代码一起使用。

非常感谢您的时间和精力!

*我认为我对这个特定问题并不重要,但我正在使用 ReactJS 进行这个项目

【问题讨论】:

    标签: javascript reactjs http-headers cors bluesnap


    【解决方案1】:

    你不能。

    用于在网络浏览器中从 JavaScript 发出 HTTP 请求的 API(fetchXMLHttpRequest)遵循重定向透明

    response 对象将包含对location 标头中指定位置的请求的响应。您永远无法访问包含重定向指令的响应。


    如果您阅读 API 的 documentation,它会说:

    您使用服务器到服务器 API 调用为特定结帐会话创建托管付款字段令牌。

    ...所以你不应该首先从客户端 JS 访问它。

    【讨论】:

    • 感谢您的回答,我已阅读文档但不明白这句话的含义。我想这就是解决方案,如果问题解决了,我会在这里尝试更新。
    • 您使用服务器上运行的代码而不是用户浏览器上运行的代码发出 HTTP 请求。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多