【问题标题】:fetch's response is empty even though the request was successful即使请求成功,fetch 的响应也是空的
【发布时间】:2016-11-12 19:09:01
【问题描述】:

我正在尝试使用 fetch 函数在客户端 Javascript 代码中从服务器检索数据。我在 Chrome 中使用名为 whatwg-fetch 的 polyfill 版本的 fetch(内部支持 fetch)。

这是我调用函数的方式:

//Called in a page loaded as http://localhost:3236/
fetch("http://localhost:8080/list", {
         mode: 'no-cors',
         credentials: "include", 
    })
    .then(function(response) {
        return response.json();
    });

如您所见,我的应用程序服务器与资源服务器不同,因此我必须为 CORS 设置选项。问题是response 没有内容:

{
    body: null,
    bodyUsed: false,
    headers: Headers,
    ok: false,
    status: 0,
    statusText: "",
    type: "opaque",
    url: "",
}

当我转到网络面板并找到发送的请求时,似乎一切正常,状态为 200 和请求的数据。

我怎样才能找到问题所在?

【问题讨论】:

  • 请注意,如果预期结果是例如application/json,Chrome 可以显示空白响应数据,但无论出于何种原因(即格式无效)都无法解析 HTTP 响应正文。在这种情况下,我通常会打开 Fiddler 并检查原始响应。
  • Chrome 的原始响应面板不算数吗?我可以在那里看到我想要的回应。只是在JS里收不到!

标签: javascript cors cross-domain fetch-api


【解决方案1】:

线索在opaque 键中。请求成功,但 Chrome 的 CORS 限制阻止您使用返回的数据。 no-cors 选项是可疑的;如果您的服务器为跨域请求正确配置,则不需要。

注意如果您已正确配置所有内容,但在本地测试客户端时遇到错误,则使用 --disable-web-security 标志启动 Chrome 可能就足够了。

【讨论】:

  • 一个问题; no-cors 和服务器配置不能互换吗?我没有在任何地方读过这篇文章,但如果他们没有读过,那么no-cors! 的含义是什么?
  • @Mehran,我对 no-cors 的预期用例并不完全清楚,但此处的文档明确指出 JavaScript 将无法检查响应负载:developer.mozilla.org/en-US/docs/Web/API/Request/mode跨度>
猜你喜欢
  • 2017-06-10
  • 2016-01-27
  • 1970-01-01
  • 2021-09-01
  • 2015-11-30
  • 2020-04-28
  • 2021-01-06
  • 2017-10-31
  • 1970-01-01
相关资源
最近更新 更多