![对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头](https://linux22.com/image/701608/%E5%AF%B9%E9%A2%84%E6%A3%80%E8%AF%B7%E6%B1%82%E7%9A%84%E5%93%8D%E5%BA%94%E6%9C%AA%E9%80%9A%E8%BF%87%E8%AE%BF%E9%97%AE%E6%8E%A7%E5%88%B6%E6%A3%80%E6%9F%A5%EF%BC%9A%E8%AF%B7%E6%B1%82%E7%9A%84%E8%B5%84%E6%BA%90%E4%B8%8A%E4%B8%8D%E5%AD%98%E5%9C%A8%E2%80%9CAccess-Control-Allow-Origin%E2%80%9D%E6%A0%87%E5%A4%B4.png)
过去几天我进行了大量的搜索,但仍然无法让它正常工作。
我正在使用 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”。