【问题标题】:Fetch is not retrieving the response from the 302 redirected call [duplicate]Fetch 未从 302 重定向呼叫中检索响应 [重复]
【发布时间】:2019-06-21 18:33:00
【问题描述】:

在 ReactJS 组件中,对重定向到另一个 API 的 API 的 fetch 调用不会返回最终目的地的响应。 Fetch 只返回 opaque 响应,返回 null 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;
            });

SocodedQueryURL 响应头:

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 响应标头:

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

【问题讨论】:

  • 您从哪个 URL 重定向到哪个目标 URL?
  • 这是一个内部 API,所以我无法分享,但您是否建议这里可能存在与服务器相关的问题,而不是前端
  • 不,我建议你因为不同的域或其他东西而不允许看到响应

标签: javascript ajax reactjs fetch-api


【解决方案1】:

因为您使用的是模式:no-cors,所以您获得了不透明的响应。这是作为一种安全机制发生的,因为您避免了 CORS 验证。所以,为了安全起见,响应的内容不能从 JS 代码中访问,它只能用于缓存目的。

更新:据我所知,您使用 no-cors 可能是因为您在使用 CORS 时遇到问题,正如您所说,因为您正在使用与 API 域不同的另一个域的资源。

为此,您需要:

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

【讨论】:

  • 哦,我明白了。那么我应该采取哪些步骤来完成这项工作呢?这意味着我想从不同的 URL 调用这个 API。
  • @efwjames,尝试:模式:'cors'
  • @efwjames 在我的回答中添加了更多详细信息以帮助您
猜你喜欢
  • 2018-08-13
  • 2018-07-15
  • 1970-01-01
  • 1970-01-01
  • 2021-10-20
  • 2011-09-25
  • 1970-01-01
  • 2016-06-21
  • 1970-01-01
相关资源
最近更新 更多