相关疑难解决方法(0)

API网关CORS:没有'Access-Control-Allow-Origin'标头

虽然已经通过API网关设置了CORS并且设置了Access-Control-Allow-Origin标头,但在尝试从Chrome中的AJAX调用API时仍然会收到以下错误:

XMLHttpRequest无法加载http://XXXXX.execute-api.us-west-2.amazonaws.com/beta/YYYYY.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许原点'null'访问.响应具有HTTP状态代码403.

我试图通过Postman获取URL ,它显示上面的标题已成功通过:

通过标题

并从OPTIONS响应:

响应标头

如何在不恢复JSON-P的情况下从浏览器调用我的API?

ajax amazon-web-services cors aws-api-gateway

67
推荐指数
9
解决办法
5万
查看次数

AWS API网关没有"Access-Control-Allow-Origin"标头

我坚持使用API​​网关的问题,我已经在这个AWS论坛上完成了所有其他的SO答案,并且已经通过他们的文档,但仍然没有乐趣.

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

DynamoDB的Lambda函数正在运行.我在AWS中创建了一个API,并为它创建了一个GET和OPTIONS方法.我读AWS并没有强制执行只有GET/POST的选项,但是当没有OPTIONS方法时我在我的ajax调用中遇到了预检错误,所以我添加了一个.

目前为了取得进展,我没有使用API​​密钥或授权.我可以使用POSTMAN成功调用我的GET方法,POSTMAN返回DynamoDB表的内容.

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

No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Run Code Online (Sandbox Code Playgroud)

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

我已尝试在OPTIONS和GET方法上启用CORS,在每次更改后重新部署API,尝试了以下(http://enable-cors.org/server_awsapigateway.html)但总是得到相同的错误安慰.

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

当我在我的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);
        }

    });

});
Run Code Online (Sandbox Code Playgroud)

任何人都可以阐明我可能会失踪的东西吗?

非常感谢

更新 请参阅下面的答案,关于我如何根据DigitalKapteain评论解决这个问题 - 在我的Lambda函数的响应中设置'Access-Control-Allow-Origin':'*'标题.我在AWS文档中查找了这个,但无法找到它.此链接描述了Lambda和Lambda Proxy之间的区别,并说明了使用CORS时要执行的操作https://serverless.com/framework/docs/providers/aws/events/apigateway/

ajax jquery amazon-web-services aws-lambda aws-api-gateway

26
推荐指数
3
解决办法
2万
查看次数

从S3上的静态站点进行POST时,AWS API Gateway端点会出现CORS错误

我创建了一个带有Serverless(serverless.com)的API端点,我通过API Gateway公开了它.虽然我已经启用了CORS,但我收到了以下错误

XMLHttpRequest无法加载 https://xxxxxxxxx.execute-api.us-west-2.amazonaws.com/development/signup.请求的资源上不存在"Access-Control-Allow-Origin"标头.因此不允许访问来源' http://yyyyyyyy.com.s3-website-us-east-1.amazonaws.com '.

端点的AWS API Gateway设置

尽管我已经设置了origin标题,但是当我使用Postman发出请求时,我没有收到任何错误.我该如何解决这个问题?

amazon-s3 cors aws-api-gateway

16
推荐指数
3
解决办法
2万
查看次数

无法在AWS API Gateway上使用CORS使用自定义请求标头

我创建并部署了具有以下结构的AWS API Gateway资源,包括自定义HTTP请求标头'X-header'

dev (stage)
  /echo (resource)
    POST (method)
      Method Request - Headers: X-header
    OPTIONS (method)
      Method Request - Headers: X-header
Run Code Online (Sandbox Code Playgroud)

当我从Chrome发送到端点时,出现以下错误.

XMLHttpRequest无法加载https://fxxxx.execute-api.us-west-2.amazonaws.com/dev/echo.预检响应中的Access-Control-Allow-Headers不允许请求标头字段X-header.

Chrome正在对OPTIONS方法进行预检检查.我可以看到请求标题:

Access-Control-Request-Headers:accept,content-type,x-header
Access-Control-Request-Method:POST

但响应标题只有:

Access-Control-Allow-Headers:Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token
Access-Control-Allow-Methods:POST,OPTIONS
Access-Control-Allow-起源:*

Chrome希望Response Access-Control-Request-Headers包含我的自定义x-header,这似乎是合乎逻辑的.这是API Gateway错误吗?

我看到的唯一解决方法是删除自定义标头并传递POST正文中的数据.

amazon-web-services http-headers cors aws-api-gateway

2
推荐指数
3
解决办法
5120
查看次数