AWS API Gateway启用CORS后未返回Access-Control-Allow-Origin header求助
解决API Gateway+Lambda代理集成下CORS响应头缺失问题
当使用Lambda代理集成时,API Gateway不会自动添加CORS相关响应头——哪怕你在网关层面配置了CORS。核心原因是代理模式下,API Gateway会完全透传Lambda返回的所有响应内容,包括头信息,所以必须在Lambda函数的返回结果中手动包含CORS头。
具体解决步骤:
- 修改Lambda函数的返回结构,确保包含
headers字段并添加Access-Control-Allow-Origin。以Python为例:
import json def lambda_handler(event, context): # 处理业务逻辑 response_data = {'message': '请求成功'} return { 'statusCode': 200, 'headers': { 'Access-Control-Allow-Origin': '*', # 也可指定具体域名,如'https://your-frontend-domain.com' 'Access-Control-Allow-Headers': 'Content-Type, Authorization', 'Access-Control-Allow-Methods': 'GET, POST, PUT, OPTIONS' }, 'body': json.dumps(response_data) }
- 处理OPTIONS预检请求:前端发起跨域请求前会发送OPTIONS预检请求,你有两种处理方式:
- 在Lambda中判断请求方法为
OPTIONS时,直接返回包含CORS头的200响应,无需执行业务逻辑 - 在API Gateway中为OPTIONS方法单独配置非代理集成,直接返回CORS头,避免浪费Lambda资源
- 在Lambda中判断请求方法为
- 验证并重新部署API:确保网关层面的CORS配置(允许源、方法、头)与Lambda返回的内容一致,之后重新发布API的对应阶段,确保配置生效。
常见误区提醒:
- 不要依赖网关层面的CORS配置自动添加头,代理模式下网关完全以Lambda返回的响应为准
- 忽略OPTIONS预检请求会导致浏览器直接拦截跨域请求
- 修改配置后忘记重新发布API阶段,导致新配置无法生效
内容的提问来源于stack exchange,提问作者bobbyt27
相关产品推荐
相关产品推荐

