我有两个系统helpdesk.ops.something.in和dev1.ops.something.in 我在helpdesk.ops中有一个文件fetchP.php ,其代码如下所示: 这是对createurl.php存在的文件createurl.php进行GET请求,如下所示 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我使用Python EVE框架编写了一个API。 尝试从AngularJS应用程序访问API时,它会显示错误,如下所示:
XMLHttpRequest cannot load http://127.0.0.1:5000/user/jay3dec. Request header field Authorization is not allowed by Access-Control-Allow-Headers.
为了纠正上述错误,我将以下内容添加到settings.py中
X_DOMAINS = '*'
X_HEADERS = 'Authorization'
现在,上述错误消失,控制台中显示一个新错误:
XMLHttpRequest cannot load http://127.0.0.1:5000/user/jay3dec. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access.
但是我已经在X_DOMAINS = '*'
添加了X_DOMAINS = '*'
。
这是angularjs代码:
$scope.validate = function() {
var encodedUserNameAndPassword = Base64.encode($scope.username + ':' + $scope.password);
$http.defaults.headers.put = {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': '*'
};
$http.defaults.headers.common['Authorization'] = 'Basic ' + encodedUserNameAndPassword;
$http({
method: 'GET',
url: 'http://127.0.0.1:5000/user/jay3dec'
}).
success(function(data, status, headers, config) {
console.log(data);
}).
error(function(data, status, headers, config) {
alert(data);
});
}
可以发现任何问题
FWIW,我有类似的问题。
然后我了解到只有模式定义的API才能获得X_DOMAINS标头的效果。 如果您使用app = Eve(settings=blah)
和@app.route()
等自己定义的api将不受X_DOMAINS标头的影响。 所以,在这种情况下,你需要编写自己的装饰器。
Eve只会在触发CORS响应时触发
Origin
标头 X_DOMAIN
在配置文件中settings.py
( settings.py
) 由于后面的条件似乎已经满足,我会确保请求是一个正确的CORS请求,它包含一个Origin
头。
阅读下面的评论后更新我认为Postman限制了Origin标题。 请尝试使用curl:
curl -H "Origin: http://example.com" --verbose http://localhost:5000
将X_DOMAIN
设置为*
,该请求应返回如下内容:
< HTTP/1.0 200 OK
< Content-Type: application/json
< Content-Length: 141
< Access-Control-Allow-Origin: http://example.com
< Vary: Origin
< Access-Control-Allow-Headers:
< Access-Control-Expose-Headers:
< Access-Control-Allow-Methods: HEAD, OPTIONS, GET
< Access-Control-Allow-Max-Age: 21600
< Server: Eve/0.5 Werkzeug/0.9.6 Python/2.7.8
< Date: Thu, 15 Jan 2015 08:41:08 GMT
如果这样做,那么服务器正在正确地提供CORS请求。 然后,您可以根据需要X_HEADERS
和其他CORS服务器端设置。
你必须配置为前夕。
X_DOMAINS = '*'
X_HEADERS = ['Authorization','Content-type']
and angular as
$http.defaults.headers.common['Authorization'] = 'Basic ' + auth;
这对我有用。
您还需要在AngularJS应用程序上打开CORS
var myApp = angular.module('myApp', [
'myAppApiService']);
myApp.config(['$httpProvider', function($httpProvider) {
$httpProvider.defaults.useXDomain = true;
delete $httpProvider.defaults.headers.common['X-Requested-With'];
}
]);
支持CORS的服务器必须响应具有多个访问控制头的请求:
Access-Control-Allow-Origin: "*"
默认情况下,CORS请求不是使用cookie进行的。 如果服务器包含此标头,那么我们可以通过将withCredentials选项设置为true来发送cookie以及我们的请求。
Access-Control-Allow-Credentials (optional)
如果我们将请求中的withCredentials选项设置为true,但服务器没有响应此标头,则请求将失败,反之亦然。
通过使用pip install flask-cors
然后编辑我的eve应用程序来使用它,我能够解决我的问题:
from flask.ext.cors import CORS
app = Eve()
CORS(app)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.