【问题标题】:Fetch API Error - preflight request doesn't pass access control check获取 API 错误 - 预检请求未通过访问控制检查
【发布时间】:2018-10-02 17:18:54
【问题描述】:

我正在尝试实现 fetch api 以从我们的服务器获取资源。我可以使用 Postman 检索资源,也可以将端点粘贴到浏览器中。但是,当我尝试使用 fetch api 访问端点时,出现以下错误:

从 Postman 拨打电话时,我得到以下结果:

从应用程序拨打电话时,我得到以下信息:

我不得不隐藏到实际的端点,因为它们是公司端点,我不能公开它们。如果这导致问题,请告诉我,也许我可以添加更多信息。

请求代码:

return fetch(url, {
    method: 'get',
    headers: this._headers()
})
.then(data => {
    console.log(data);
    return data;
})
.then(this._checkStatus)
.then(res => res.json());


_headers(auth) {
    let headers = new Headers({
        'Content-Type': 'application/json'
    });

    return headers;
}

_checkStatus(response) {
    if (response.status >= 200 && response.status < 300) {
        return response;
    } else {
        let error = new Error(response.statusText);
        error.response = response;
        throw error;
    }
}

【问题讨论】:

  • 请检查您的路线的 OPTIONS 方法,您是否故意将 OPTIONS 动词变为 404
  • 我刚刚更新了帖子,因为我意识到我忘记为调用添加实际代码。你能详细说明一下吗?
  • @Aron 可以向 API 开发人员验证是否启用了 CORS。它会清除大部分的东西

标签: javascript rest fetch-api


【解决方案1】:

这通常发生在您进行跨域请求时。 要解决此问题,您必须在您的服务器上启用 CORS(跨源资源共享)https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

【讨论】:

  • 所以我的问题是,如果服务器设置不正确,为什么这在邮递员中有效?
  • 因为是浏览器限制了跨域请求,Postman 不限制这些。阅读有关 CORS 的更多信息
  • 好的,谢谢。我想我假设邮递员的工作方式与浏览器相同。
  • @crack_iT 但是为什么 OPTIONS 方法会返回 404? OPTIONS 方法是一种验证客户端请求来源真实性的方法
  • @Suresh 取决于服务器配置
猜你喜欢
  • 2022-01-04
  • 2019-12-29
  • 2018-01-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-25
  • 2017-04-04
  • 2016-06-05
相关资源
最近更新 更多