小编典典

AWS API网关不存在“ Access-Control-Allow-Origin”标头

ajax

我陷入了API网关问题,并且在AWS论坛上浏览了所有其他SO解答,并通过了他们的文档,但仍然不满意。

我正在尝试使用AWS API网关设置API,该API调用Lambda函数,该函数读取/写入DynamoDB中的表。

DynamoDB的Lambda函数正在运行。我已经在AWS中创建了一个API,并为其创建了GET和OPTIONS方法。我读到AWS并没有仅对GET /
POST强制执行OPTIONS,但是当没有OPTIONS方法时,我在ajax调用中遇到了预检错误,因此我添加了一个。

现在只是为了取得进展,我还没有使用API​​密钥或授权。我可以使用POSTMAN成功调用我的GET方法,该方法返回DynamoDB表的内容。

但是当我尝试使用JQuery ajax调用时,我得到了

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.

我可以在网络标签下看到使用Chrome开发工具,OPTIONS方法返回状态200,而GET返回状态200,但出现上述错误。

我尝试过同时在OPTIONS和GET方法上启用CORS,在每次更改后都重新部署了API,尝试了以下方法(http://enable-
cors.org/server_awsapigateway.html),但始终会在安慰。

我正在从桌面上的文件执行ajax调用,因此origin为null,因为该页面将作为JS中的单个网页应用程序部署到S3。

当我在GET和OPTIONS上启用CORS时,我可以看到Access-Control-Allow-Headers为,'Content- Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'而Access-Control-
Allow-Origin *为'*'

我的Ajax呼叫如下所示。我还尝试复制POSTMAN使用的确切标头,该标头设置了Authorization标头(我已经在AWS中关闭了此标头),但是上面我总是遇到相同的错误

var awsHeaders = {};
awsHeaders['X-Amz-Date'] = '20161127T171734';

$('#add, #cloud').click(function() {

    $.ajax({

        type: 'GET',
        headers: awsHeaders,
        dataType : "json",
        url: '...',
        success: function (res) {

            console.log('response in GET:');
            console.log(res);

        },
        error: function(data) {
            console.log('in error');
            console.log(data);
        }

    });

});

谁能阐明我可能会想念的东西?

非常感谢

更新 请参阅下面的答案,以了解如何按照DigitalKapteain注释解决此问题-通过在Lambda函数的响应中设置’Access-
Control-Allow-
Origin’:’*’标头。我在AWS文档中寻找了此内容,但找不到它。此链接描述了Lambda和Lambda代理之间的区别,并说明了使用CORS
https://serverless.com/framework/docs/providers/aws/events/apigateway/时的操作


阅读 303

收藏
2020-07-26

共1个答案

小编典典

对Lambda函数的GET请求响应也必须包含Access-Control-Allow-Origin标头。

2020-07-26