对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头

过去几天我进行了大量的搜索,但仍然无法让它正常工作。

我正在使用 AngularJS 和 Webapp2 Python(Google App Engine)。

我正在使用工厂资源:

app.factory('facTest', ['$resource', function ($resource) {
    return $resource('http://localhost:10080/:route', {}, {
        GetTest: { method: 'GET', isArray: false, params: { route: "gettest", user_id: '@user_id' } }
    })
}]);

这很好用,但是在 WebApp2 上我需要添加:

self.response.headers['Access-Control-Allow-Origin'] = '*'

或者我遇到了类似的问题。

我的问题是当我尝试通过 AngularJS 发送自定义标头时:

$http.defaults.headers.common.Authorization = 'Basic ' + "123454";

当我这样做时,我收到错误。我试图在所有 HTTP 调用之前将一个令牌添加到标头中。

我曾尝试将其添加到 python WebApp2

 self.response.headers['Access-Control-Allow-Headers'] = 'X-Requested-With, Content-Type, X-Codingpedia, Authorization'
 self.response.headers['Access-Control-Allow-Methods'] = 'GET, POST, DELETE, PUT, OPTIONS'

我仍然遇到同样的错误。

“选项http://localhost:10080/gettest?user_id=1405(方法不允许)”

“XMLHttpRequest无法加载”http://localhost:10080/gettest?user_id=1。对预检请求的响应未通过访问控制检查:所请求的资源上不存在“Access-Control-Allow-Origin”标头。“

非常感谢您的帮助。我没有线索,不知道还能尝试什么。

先谢谢了。

突破

我找到了一种让它发挥作用的方法。我不再使用:

{ method: 'GET', isArray: false,

相反,我使用:

{ method: 'OPTIONS', isArray: false,

除了python代码之外:

def options(self):

这使得我能够发送授权标头。

答案1

您必须包括:

    def options(self, *args, **kwargs):
      self.response.headers['Access-Control-Allow-Origin'] = '*'
      self.response.headers['Access-Control-Allow-Headers'] = 'Origin, X-Requested-With, Content-Type, Accept, Authorization'
      self.response.headers['Access-Control-Allow-Methods'] = 'POST, GET, PUT, DELETE'

将其添加到你的班级,包括你的获取。

实际情况是,您的请求将查找选项。因此出现错误“OPTIONS”。

相关内容