amazon-web-services - AWS Lambda HTTP API网关集成无法实现CORS

标签 amazon-web-services aws-lambda cors aws-api-gateway

创建了一个返回3个HTTP header 的AWS Lamba函数(NodeJS):aaa,Access-Control-Allow-Origin和bbb:

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: { "aaa":"aaa", "Access-Control-Allow-Origin":"*", "bbb":"bbb" },
        body: JSON.stringify('Hello from Lambda!'),
    };
    return response;
};

该功能已集成到HTTP API(不是REST API)中。在HTTP API网关配置的“配置CORS”部分中,HTTP header “Access-Control-Allow-Origin”设置为“*”。请查看屏幕截图:

Gateway Config

命令“curl -i https://xxxxxxxxxx.execute-api.eu-central-1.amazonaws.com”证明已明确删除了HTTP header Access-Control-Allow-Origin,因为仅返回了HTTP header aaa和bbb:
HTTP/2 200 
date: Tue, 14 Apr 2020 11:01:58 GMT
content-type: text/plain; charset=utf-8
content-length: 20
aaa: aaa
bbb: bbb
apigw-requestid: K-S2EjVWliAEJKw=

为什么即使执行了“Configure CORS”,该头仍然不存在?

(为了确定解决方案,我现在正在谷歌搜索超过两天,这让我发疯了)

最佳答案

根据Configuring CORS for an HTTP API-

If you configure CORS for an API, API Gateway ignores CORS headers returned from your backend integration.



这就是为什么忽略Lambda(集成)中的CORS header 的原因。这是原始REST API与新HTTP API之间的差异之一。如果使用这些API-

For a CORS request, API Gateway adds the configured CORS headers to the response from an integration.



当您进行简单的 curl 时,实际上并不是在进行跨域请求。因此,您看不到HTTP API会设置的CORS header 。为了验证CORS请求是否有效,我在以下请求中传递了Origin header ,然后可以看到CORS header 以及来自Lambda的自定义 header -
$ curl -v -X GET https://$API_ID.execute-api.$AWS_REGION.amazonaws.com -H "Origin: https://www.example.com"

< HTTP/2 200
< date: Tue, 14 Apr 2020 18:02:26 GMT
< content-type: text/plain; charset=utf-8
< content-length: 18
< aaa: aaa
< bbb: bbb
< access-control-allow-origin: https://www.example.com
< access-control-expose-headers: date, x-api-id

以下是我在API上的CORS配置的摘录。我将Access-Control-Allow-Origin值添加为https://www.example.com,并将其作为我的curl请求中Origin头文件的一部分传递。这样的请求将被视为CORS。

enter image description here

关于amazon-web-services - AWS Lambda HTTP API网关集成无法实现CORS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61188770/

相关文章:

amazon-web-services - 我在哪里可以看到 AWS 控制台中 RDS 实例的表?

ruby-on-rails - EC2 中的 Ruby 多线程导致奇怪的行为

amazon-web-services - 有没有办法将 AWS CLI 配置文件导出到环境变量?

amazon-web-services - AWS Lambda - 同步与异步

angularjs - 在 AngularJS 中访问 JSONP 请求的真实 URL

amazon-web-services - GO-AWS-SDK 访问 AWS 上的实例信息

aws-lambda - 使用相同代码更新 Terraform lambda source_code_hash

amazon-s3 - AWS SES,电子邮件接收变灰

java - 将 @CrossOrigin 与旧注释一起使用

apache - JasperServer 被 CORS 策略阻止 : No 'Access-Control-Allow-Origin'