当前位置: 首页 > 面试题库 >

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

萧鸿轩
2023-03-14
问题内容

我陷入了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/时的操作


问题答案:

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



 类似资料:
  • 问题内容: 我已经集成了带角度应用程序的按键斗篷。基本上,前端和后端都在不同的服务器上。后端应用程序在Tomcat 8上运行。前端应用程序在JBoss欢迎内容文件夹上运行。 角度配置 请求标题 Web控制台错误。 后端的Cors筛选器 问题答案: 我与KeyCloak和CORS以及所有这些都进行了大约两个星期的斗争,这是我的解决方案(针对keycloak 3.2.1): 这全部与配置KeyCloa

  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?

  • null 服务器的响应如下: XMLHttpRequest无法加载http://nqatalog.negroesquisso.pt/login.php。Access-Control-Allow-Origin不允许Origin 。 如何解决此问题?

  • 虽然已经通过API网关设置了CORS,并且设置了头,但在尝试在Chrome内从AJAX调用API时,我仍然收到以下错误: XMLHttpRequest无法加载http://xxxxx.execute-api.us-west-2.amazonaws.com/beta/yyyyy。请求的资源上没有“access-control-allow-origin”标头。因此不允许访问源“null”。响应的HTT

  • 我很难强制S3在它从一个bucket返回的所有对象上设置CORS头,尽管启用了CORS,但由于客户端S3上传正在工作,返回的对象没有CORS头! 我启用的策略是: 对象URL示例https://s3.amazonaws.com/captionable/meme/test 有人知道怎么了吗?