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

API Gateway调用Lambda遇CORS错误,常规方案无效求解决

问题回顾
  • 配置背景:API Gateway已启用CORS,集成响应映射了全量CORS头,Lambda响应也显式返回对应头,但调用仍触发CORS错误
  • 两类错误提示:
    1. ...has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.
    2. ...has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
  • 前端调用逻辑:携带Content-Type和X-Api-Key头的POST请求
解决思路

1. 修复OPTIONS方法核心配置

  • 将OPTIONS方法的集成类型改为MOCK,无需绑定Lambda。预请求仅需API Gateway直接返回响应,无需执行业务逻辑
  • 确认OPTIONS方法的方法响应已定义所有CORS头(如Access-Control-Allow-Origin),且集成响应的映射值格式正确:字符串值必须用单引号包裹(如'*'),不能用双引号或无引号
  • 关闭OPTIONS方法的「API Key Required」设置:浏览器预请求不会携带X-Api-Key,强制要求会直接导致预请求失败

2. 修正Lambda响应的错误头字段

  • Access-Control-Allow-Credentials的有效值只能是true或false,不能设为*,否则浏览器会忽略该头导致校验失败。修改Lambda代码对应字段:
    'Access-Control-Allow-Credentials': true,
    
  • 若无需携带凭证(如Cookie),可直接移除该头,避免不必要的规则冲突

3. 确认API Gateway部署有效性

  • 修改配置后必须重新部署到目标阶段,且确认部署的是最新配置
  • 测试时使用浏览器无痕模式,避免缓存旧的响应头干扰结果

4. 手动验证预请求响应

用curl发送OPTIONS预请求,排查API Gateway的实际返回情况:

curl -X OPTIONS https://blah123.execute-api.us-east-2.amazonaws.com/blahblah1 \
  -H "Origin: https://你的前端域名.com" \
  -H "Access-Control-Request-Method: POST" \
  -H "Access-Control-Request-Headers: Content-Type,X-Api-Key" \
  -v

重点检查:

  • 响应状态码是否为200
  • 响应头是否包含所有配置的CORS字段
  • Access-Control-Allow-Headers是否包含X-Api-Key和Content-Type

5. 保证ANY方法的头映射一致性

  • 确保ANY方法的方法响应已定义所有CORS头,且集成响应的映射规则与OPTIONS方法完全一致
  • Lambda返回的头名称需与API Gateway中method.response.header.xxx的定义完全匹配(大小写敏感)

6. 排查网关错误响应的CORS配置

确认4xx/5xx默认网关响应已正确添加CORS头,避免因后端错误(如Lambda执行失败)导致浏览器无法获取真实错误信息,转而触发CORS错误

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 11:17:09