提取未检索到302重定向呼叫的响应

时间:2019-01-28 17:32:56

标签: javascript ajax reactjs fetch-api

在ReactJS组件中,对重定向到另一个API的API的访存调用不会返回最终目标的响应。提取仅返回opaque响应,且返回值为0,就好像您的呼叫失败一样。它甚至没有说它已重定向。但是在Chrome的控制台中,“网络”标签清楚地显示了重定向的呼叫已成功。

            let call = fetch(encodedQueryUrl, {
                method: 'GET',
                cache: 'no-cache',
                mode: 'no-cors',
                redirect: 'follow',
                credentials: 'same-origin'
            }).then((response) => {
                console.log("Response???", response);
                return response;
            });

encodingQueryURL响应标头:

Request Method: GET
Status Code: 302 
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Headers: access-control-allow-origin
Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE
Access-Control-Allow-Origin: *
content-length: 0
content-type: text/html; charset=UTF-8

和302 Response标头:

Request Method: GET
Status Code: 200 
Referrer Policy: no-referrer-when-downgrade
Access-Control-Allow-Headers: access-control-allow-origin
access-control-allow-methods: GET, POST, GET, OPTIONS, PUT, DELETE
access-control-allow-origin: *
content-type: application/json; charset=UTF-8

1 个答案:

答案 0 :(得分:4)

因为您使用的是“ no-cors”模式,所以得到的响应不透明。这是一种安全机制,因为您要避免CORS验证。因此,为了确保其安全性,无法从JS代码访问响应的内容,只能将其用于缓存。

您可以获取有关不透明响应here的更多信息

更新:据我所知,您可能使用了无相关信息,是因为您遇到了CORS的问题,因为您正在消耗来自另一个域的资源,而该域不同于API的域。

要实现这一目标,您将需要:

  • 修改您的API,以将运行前端应用程序的域添加到批准的来源列表中,以便您可以使用该API或
  • 使前端应用程序与API在同一服务器上运行