Amazon web services 如何为AWS API网关资源启用CORS

Amazon web services 如何为AWS API网关资源启用CORS,amazon-web-services,cors,aws-lambda,aws-api-gateway,Amazon Web Services,Cors,Aws Lambda,Aws Api Gateway,我使用AWSAPI网关和AWS Lambda创建了RESTAPI,当我配置CORS时,我遇到了这样的问题——我能够为OPTIONS方法配置CORS响应头,但没有为GET方法配置CORS响应头 我是根据这个方法做的,但是当我调用GET方法时,我没有看到响应中所需的头(访问控制允许方法、访问控制允许头、访问控制允许源)。因此,我在客户端遇到了错误: 未能加载#我的#测试#rest#:请求的资源上不存在“Access Control Allow Origin”头。因此,不允许访问源代码#我的测试#我的

我使用AWSAPI网关和AWS Lambda创建了RESTAPI,当我配置CORS时,我遇到了这样的问题——我能够为OPTIONS方法配置CORS响应头,但没有为GET方法配置CORS响应头

我是根据这个方法做的,但是当我调用GET方法时,我没有看到响应中所需的头(访问控制允许方法、访问控制允许头、访问控制允许源)。因此,我在客户端遇到了错误:

未能加载#我的#测试#rest#:请求的资源上不存在“Access Control Allow Origin”头。因此,不允许访问源代码#我的测试#我的rest#url#


作为一个临时修复,我在Lambda函数的代码中硬编码了所需的头,但它看起来不是正确的解决方案,我想了解为什么它对我不起作用。你知道我做错了什么吗?

因为你的方法使用了Lambda代理集成,你需要:

(1) 作为Lambda响应的一部分,提供
访问控制允许原点
标题。例如:

callback(null, {
    statusCode: 200,
    headers: {"Content-Type": "application/json", "Access-Control-Allow-Origin": "*"},
    body: JSON.stringify({message: "Success"})
});

(2) 并将
Access Control Allow Origin
作为200响应头添加到方法响应配置中。

是否对
GET
方法使用Lambda代理集成?@KhalidT。是的,我用的就是我已经用过的。但我认为在函数的代码中硬编码头不是一个好主意,因为它看起来违反了单一责任原则。我正在寻找如何使用API网关配置来实现这一点我完全同意,但由于代理集成禁用了集成响应,因此您必须依靠后端返回
访问控制允许来源
头。对于遵循上述操作但仍有问题的用户。当我为资源方法设置
API Key Required=true
时,我的API网关资源在遵循上述操作后仍然会失败。几个小时后,我挠头,发现CORS
403
错误,我发现如果您需要资源方法的api密钥,那么您必须在AWS中创建一个使用计划,以配合api密钥和资源。一旦我设置好了,我就可以在方法上要求api密钥,并且不再收到错误。