对预检请求的响应不通过访问控制检查:请求的资源上不存在“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 = 1 405(方法不允许)”

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

任何帮助是极大的赞赏。 我不知道还有什么可以尝试的。

先谢谢了。

突破

我find了一个使它工作的方法。 我不再使用:

 { method: 'GET', isArray: false, 

相反,我正在使用:

 { method: 'OPTIONS', isArray: false, 

除了python代码:

 def options(self): 

这让我发送授权标题。

你必须包括:

  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' 

添加到你的课堂,包括你的得到。

发生什么事是你的请求会寻找选项。 强化错误,“选项”。