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

S3托管网站通过API Gateway访问Lambda报CORS错误无法解决

问题排查与解决方案

核心问题原因梳理

你遇到的跨域报错和S3存储桶的CORS配置无关,该报错是浏览器请求API Gateway域名时,响应头未返回Access-Control-Allow-Origin导致的,常见诱因有以下几种:

  • 未正确处理OPTIONS预检请求
    浏览器发送POST请求前会先发送OPTIONS预检请求,如果你仅为POST/GET方法配置了集成,未给OPTIONS方法配置正确的响应头,预检请求会直接失败,返回的默认响应不带CORS头。你需要确认API Gateway的OPTIONS方法已配置为返回200状态码,且响应头包含Access-Control-Allow-Origin: *以及对应的允许方法、允许头配置。

  • API Gateway配置修改后未重新部署
    在API Gateway控制台修改CORS配置、方法配置后,必须手动将修改部署到对应的Stage,否则配置不会生效。修改完后进入「Stages」页面选择你使用的环境,点击「Deploy API」重新部署后再测试。

  • Lambda返回格式不符合代理集成要求
    如果你用的是Lambda代理集成,返回结构必须严格符合要求,示例正确格式如下:

    return {
      statusCode: 200,
      headers: {
        'Content-Type': 'application/json',
        'Access-Control-Allow-Headers': 'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token',
        'Access-Control-Allow-Origin': '*',
        'Access-Control-Allow-Methods': 'OPTIONS,POST,GET'
      },
      body: JSON.stringify(yourResponseData)
    }
    

    如果你漏写了statusCode、把headers放在了body内部,或者返回格式错误,API Gateway会返回默认错误响应,不带自定义的CORS头。

  • Lambda执行出错返回错误响应
    如果Lambda运行时报错(比如无DynamoDB访问权限、代码执行异常),返回的错误响应默认不带你配置的CORS头,浏览器会优先报跨域错误而不是实际的接口错误。你可以先用curl命令直接调用API Gateway接口,检查返回状态码和响应头:

    curl -v https://你的API地址.execute-api.eu-west-3.amazonaws.com/default/你的函数名
    

    如果curl调用返回非200状态码,先排查Lambda的执行错误,修复后再验证跨域问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 20:39:03