我使用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);

    });
}

可以发现任何问题

#1楼 票数:4

FWIW,我有类似的问题。

然后我了解到只有模式定义的API才能获得X_DOMAINS标头的效果。 如果您使用app = Eve(settings=blah)@app.route()等自己定义的api将不受X_DOMAINS标头的影响。 所以,在这种情况下,你需要编写自己的装饰器。

#2楼 票数:2

Eve只会在触发CORS响应时触发

  • 请求包括Origin标头
  • X_DOMAIN在配置文件中settings.pysettings.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服务器端设置。

#3楼 票数:2

你必须配置为前夕。

X_DOMAINS = '*'
X_HEADERS = ['Authorization','Content-type']
and angular as 
$http.defaults.headers.common['Authorization'] = 'Basic ' + auth;

这对我有用。

#4楼 票数:0

您还需要在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,但服务器没有响应此标头,则请求将失败,反之亦然。

#5楼 票数:0

通过使用pip install flask-cors然后编辑我的eve应用程序来使用它,我能够解决我的问题:

from flask.ext.cors import CORS
app = Eve()
CORS(app)

  ask by iJade translate from so

未解决问题?本站智能推荐:

1回复

gocd-所请求的资源上不存在“ Access-Control-Allow-Origin”标头

我想使用其POST /go/files/:pipeline_name/:pipeline_counter/:stage_name/:stage_counter/:job_name/*path_to_file的API将工件上传到gocd管道。 我有启用了Google oauth2的nodejs应
3回复

发布到python eve时缺少CORS标头“ Access-Control-Allow-Origin”

我已经开始学习python-eve。我已经创建了基本演示,如下所示: Python eve快速入门” 现在我做了一个简单的网页,尝试将一些数据发布到localhost上的/ people,但是当我尝试提交数据时,出现以下错误: 跨域请求被阻止:同源策略禁止读取位于http://
1回复

客户端计算机中的Python Eve API访问权限

这个问题已经在这里有了答案: 如何更改前夕的IP地址? 1个答案 我想在客户端计算机中访问python eve的其余api。 这是我的代码, 我在本地计算机上获得了输出,但是我想知道如何配置主机和端口以在客户端或另一台计算机上访问此表。
5回复

Python-eve RestApi框架中的用户依赖资源筛选器

我想基于Python eve restframework中用户的访问权限实现一个“更复杂”的过滤器。 问题 我们有令牌身份验证,用户帐户在TokenAuth类中获取。 用户有一些合同,每个合同都有账单。 我要实现一个端点/ bills,该端点显示他的合同账单。 我们使用mong
2回复

所请求的资源上没有“ Access-Control-Allow-Origin”标头。

我正在使用ajax来调用以下网址: “ https://www.bittrex.com/api/v1.1/public/getticker?market=usdt-btc ” 我收到以下错误: 我已经安装了django-cors-headers并且我的settings.py看
2回复

如何使用python eve api调用方法?

假设我要执行一个随机函数: 此函数将计算少量值的平均值并将其插入用户字段。 这只是一个例子。 如何使用前夕api调用此函数? 我查阅了文档,但没有找到任何东西。
1回复

仅使用python-eve API向MongoDB请求`_items`

我正在使用python-eve -API(简称eve )访问MongoDB。 插入一些示例数据后,我正在使用Chrome的Postman测试API。 由于eve除了在文档中说明了所请求的数据和HATEOAS指令之外,还提供了其他信息,我只是想知道如何仅请求_items -dictiona
1回复

使用Python Eve组织REST API Web服务构建[关闭]

我正在尝试使用Python Eve构建REST API Web服务。 我有使用Lithium(PHP框架)和Ruby on Rails的经验,但我正在努力找出与Python Eve一起使用的正确文件夹结构。 关于在哪里放置我的模型和控制器的任何建议(主要是前/后挂钩)。