【问题标题】:How to get past CORS using AWS API gateway and Lambda?如何使用 AWS API 网关和 Lambda 通过 CORS?
【发布时间】:2019-07-03 21:24:31
【问题描述】:

我目前有一个 Lambda 函数,在我测试它时可以工作(它是一个用于订阅用户列表的 Mailchimp 集成)。

See my lambda function here on Github

我通过 lambda 使用 API 网关创建了一个 API 端点。

但是,当我在我的应用程序上测试它时(当前通过 localhost:3000,我收到来自 API 网关的 CORS 错误:

Access to XMLHttpRequest at 'https://MY_API.execute-api.us-west-2.amazonaws.com/default/mailchimp-lambda' from origin 'http://localhost:3000' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

我尝试了多种方法:

  1. 按照https://serverless.com/blog/cors-api-gateway-survival-guide/ 的建议添加 npm 包 middy
  2. 在 lambda 中使用回调并按照此问题的建议添加 CORS:Configure CORS response headers on AWS Lambda?

谁能解释如何访问 lambda 函数?

【问题讨论】:

  • 看起来你没有启用 cors。这可能会对您有所帮助:docs.aws.amazon.com/apigateway/latest/developerguide/…
  • 我通过 API Gateway 控制台启用了 CORS:✔ 创建 OPTIONS 方法✔ 向 OPTIONS 方法添加具有空响应模型的 200 方法响应✔ 向 OPTIONS 方法添加模拟集成✔ 向 OPTIONS 方法添加 200 集成响应✔ 添加Access-Control-Allow-Headers、Access-Control-Allow-Methods、Access-Control-Allow-Origin 方法 OPTIONS 方法的响应标头 ✔ 添加 Access-Control-Allow-Headers、Access-Control-Allow-Methods、Access-Control -Allow-Origin 集成响应标头映射到 OPTIONS 方法
  • 那之后你重新部署了api网关吗?
  • @deosha 是的,我重新部署了,我还在声明中添加了一个资源策略,包括“Principal”:“*”,但无济于事。另外,我正在查看 CloudWatch 日志,我正在控制台记录事件,并且 event.body 来自我的浏览器时为空,但它是通过 Postman 定义的。它说 httpMethod 是 OPTIONS 这很奇怪,我认为 lambda 函数不会在自动 OPTIONS 请求期间运行。
  • 你在 API Gateway 配置->Gateway Responses-> Default 4XX 中的配置是什么?可以在那边加上 Access-Control-Allow-Origin: '* 重新部署再检查一下吗?

标签: cors aws-lambda aws-api-gateway


【解决方案1】:

如果您使用的是 LAMBDA-PROXY 集成,这意味着您的响应需要 Access-Control-Allow-Origin 标头。

下面是函数示例:

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

您可以在此处找到有关类似问题的更多详细信息:https://github.com/serverless/serverless/issues/1955

【讨论】:

    猜你喜欢
    • 2019-05-10
    • 1970-01-01
    • 2019-05-02
    • 2020-11-29
    • 2020-10-03
    • 2021-03-16
    • 2021-08-26
    • 2019-03-16
    • 1970-01-01
    相关资源
    最近更新 更多