You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过AWS CDK启用CORS?解决跨域请求报错问题

解决API Gateway跨域(CORS)问题

你的问题核心在于:仅配置预检请求(OPTIONS)的CORS规则是不够的,实际POST请求的响应也需要返回Access-Control-Allow-Origin头。浏览器不仅会发送OPTIONS预检请求,还会检查实际请求的响应头是否包含跨域允许的字段。

问题分析

你通过addCorsPreflight配置了OPTIONS请求的处理,但这个方法只负责处理浏览器的预检请求,不会自动为POST请求添加响应头。当浏览器收到POST响应时,如果没有Access-Control-Allow-Origin头,就会抛出你看到的错误。

两种解决方案

方案1:在Lambda函数中返回CORS响应头

直接修改你的Lambda代码,在返回结果中添加跨域头。比如Node.js的Lambda示例:

exports.handler = async (event) => {
  const response = {
    statusCode: 200,
    headers: {
      "Access-Control-Allow-Origin": "*", // 生产环境建议指定具体域名,不要用*
      "Access-Control-Allow-Headers": "*"
    },
    body: JSON.stringify({ message: "请求成功" })
  };
  return response;
};

方案2:通过CDK配置API Gateway集成响应自动添加头

如果不想修改Lambda代码,可以在CDK中为POST方法的集成响应配置响应头映射:

// 创建POST方法时保存方法对象
const postMethod = users.addMethod("POST");

// 配置集成响应,映射CORS头
postMethod.integration.addResponse("200", {
  responseParameters: {
    "method.response.header.Access-Control-Allow-Origin": "'*'"
  }
});

// 声明方法响应包含该头
postMethod.addMethodResponse({
  statusCode: "200",
  responseParameters: {
    "method.response.header.Access-Control-Allow-Origin": true
  }
});

额外检查点

  • 确认CDK代码已部署生效:执行cdk deploy后,登录AWS控制台查看API Gateway的资源配置,检查OPTIONS方法是否存在,以及POST方法的响应头配置是否正确。
  • 生产环境避免使用*作为允许来源,应指定具体域名(比如["https://your-frontend-domain.com"]),提升安全性。

内容的提问来源于stack exchange,提问作者Moyshe Zuchmir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 02:54:22