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

请求修复AWS API Gateway与Lambda函数搭配时的CORS跨域问题

解决AWS API Gateway代理Lambda时的CORS错误:No 'Access-Control-Allow-Origin' header缺失

你遇到的问题是Web应用调用API Gateway时触发CORS错误,提示has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.,即便已经在Lambda代码中添加了CORS头,且API Gateway启用了CORS配置,问题仍未解决。以下是针对性的排查和修复方案:

1. 处理OPTIONS预检请求

浏览器发送非简单请求(比如带自定义头、PUT/DELETE方法)前,会先发OPTIONS预检请求。如果你的API Gateway代理集成没有正确处理OPTIONS请求,就会导致CORS错误:

  • 方案一:在Express中直接处理OPTIONS
    安装并使用cors中间件,自动处理OPTIONS请求并添加正确的CORS头:
    // 在你的Express app文件(app.js)中添加
    const cors = require('cors');
    app.use(cors({
      origin: '*', // 生产环境建议替换为具体域名
      methods: ['GET', 'POST', 'PUT', 'DELETE', 'OPTIONS'],
      allowedHeaders: '*'
    }));
    
  • 方案二:在API Gateway中配置MOCK集成处理OPTIONS
    避免OPTIONS请求走到Lambda,直接由API Gateway返回CORS响应:
    1. 在API Gateway的资源下创建OPTIONS方法
    2. 集成类型选择MOCK
    3. 在"方法响应"中添加Access-Control-Allow-Origin、Access-Control-Allow-Methods、Access-Control-Allow-Headers响应头
    4. 部署API到对应阶段

2. 为错误分支添加CORS头

你的Lambda代码中,try块的响应添加了CORS头,但catch块返回的500错误响应没有包含这些头。如果请求触发了异常(比如数据库连接失败),浏览器会因为响应缺少CORS头而报错。修改catch块:

catch (err) {
  console.error("Failed to process request: ", err);
  return {
    statusCode: 500,
    headers: {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Methods": "*",
      "Access-Control-Allow-Headers": "*",
    },
    body: JSON.stringify({ error: "Internal Server Error" }),
  };
}

3. 确认API Gateway已重新部署

修改API Gateway的CORS配置或资源后,必须重新部署对应的阶段,否则新配置不会生效。在API Gateway控制台的"部署API"选项中,选择当前阶段重新部署。

4. 检查Express中间件是否覆盖响应头

如果你的Express应用中有其他中间件(比如安全中间件、自定义响应处理),可能会覆盖Lambda代码中添加的CORS头。优先使用cors中间件配置CORS,确保头被正确设置。

5. 验证响应头是否正确返回

使用Postman或curl直接调用API,查看响应头是否包含Access-Control-Allow-Origin:

curl -I https://your-api-id.execute-api.region.amazonaws.com/stage/resource-path

如果响应头中没有该字段,说明Lambda或API Gateway的配置仍有问题,需要进一步排查。

内容的提问来源于stack exchange,提问作者ישי ביטון

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 14:47:34