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

AWS Lambda+API Gateway配置CORS后仍遭浏览器跨域拦截问题

问题描述

我已按照AWS官方文档通过API Gateway为AWS Lambda配置了CORS支持,并用官方测试方法验证API,测试成功且显示access-control-allow-origin已启用(见截图)。但通过JavaScript发起请求时,浏览器提示:

has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

附上JS请求代码及Lambda函数截图,请问问题出在哪里?

排查与解决建议
  • 先确认API是否重新部署:在控制台配置完CORS后,必须重新部署API到对应的阶段,否则新的CORS设置不会生效,浏览器请求的还是旧配置的API。这是最常见的疏忽点。
  • 检查Lambda的响应头:如果API Gateway用的是Lambda代理集成模式,控制台的CORS配置不会生效,必须让Lambda自己返回Access-Control-Allow-Origin头。比如Lambda返回结构要包含headers字段:
    {
      "statusCode": 200,
      "headers": {
        "Access-Control-Allow-Origin": "*" // 或者指定你的前端域名,比如"https://your-frontend.com"
      },
      "body": JSON.stringify("请求成功")
    }
    
    就算不是代理集成,Lambda返回的头也可能覆盖API Gateway的配置,所以要确保Lambda没返回冲突的头。
  • 验证OPTIONS方法配置:浏览器发起跨域请求前会先发OPTIONS预检请求,你要确认API Gateway的OPTIONS方法已经正确配置了CORS规则,包括允许的origin、方法、请求头。如果只给GET/POST配置了CORS,没处理OPTIONS,预检失败就会触发这个错误。
  • 清空浏览器缓存测试:浏览器可能缓存了旧的API响应头,导致新配置不生效。试试用隐私模式打开页面,或者手动清空缓存后再测试。
  • 核对请求地址与CORS配置的origin:确保JS请求的API地址和你配置CORS时允许的origin完全匹配,比如前端域名是https://abc.com,你配置的是http://abc.com,或者端口不一致,都会导致origin不匹配,浏览器拒绝请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 09:32:38