无法调用我的 api 抛出错误不允许需要预检的跨域请求

Posted

技术标签:

【中文标题】无法调用我的 api 抛出错误不允许需要预检的跨域请求【英文标题】:Not able to call my api throwing error Disallowed for cross-origin requests that require preflight 【发布时间】:2016-03-02 09:38:20 【问题描述】:

嘿,我是 ember 和前端的新手。我的后端是使用 django 设计的。我所有的 api 端点都以“/”结尾(例如:http://example.com/api/feed/).Now,当我从 ember 应用程序调用这个 api 时。它将请求发送到“ http://example.com/api/feed" 并留下结尾" / "。

一些代码sn-p是:

routes.js:

return this.store.findRecord('feed');

模型名称是 feed。

adapter.js:

host:"http://example.com/api",
headers:'authorization:"abc"

控制台中的错误是:

请求被重定向到“http://example.com/api/feed/”,这对于需要预检的跨域请求是不允许的。

所以它正在重定向到正确的 api 端点,但 cors 不允许请求发生。

有没有办法通过 ember 以“/”结尾调用 api。

【问题讨论】:

【参考方案1】:

覆盖适配器中的buildURL 方法。 RESTAdapter 示例:

DS.RESTAdapter.extend(
  buildURL (modelName, id, snapshot, requestType, query) 
    return this._super(modelName, id, snapshot, requestType, query) + '/';
  
)

您也可以重构它以使用 arguments 而不是显式指定每个参数。

【讨论】:

以上是关于无法调用我的 api 抛出错误不允许需要预检的跨域请求的主要内容,如果未能解决你的问题,请参考以下文章

已完成 401 未授权请求被重定向到不允许需要预检的跨域请求

该请求被重定向到“https://..com/site/login?”,这对于需要预检的跨域请求是不允许的

我正在使用 angularjs 和 django-cors-headers 然后给出“这对于需要预检的跨域请求是不允许的。”

为啥我的跨域 POST 请求预检了 OPTIONS 请求?

发送带有自定义 HTTP 标头的跨域请求时禁用预检 OPTION 请求

chrome 扩展中的跨域 XMLHttpRequest