API Gateway、Lambda、Cognito的CORS问题:预检请求未返回HTTP成功状态
问题
遇到CORS错误:对预检请求的响应未通过访问控制检查:未返回HTTP成功状态。
本地请求代码:
var myHeaders = new Headers(); myHeaders.append("Authorization", "TOKEN"); var requestOptions = { method: 'GET', headers: myHeaders, redirect: 'follow' }; fetch("https://XXXXXX.execute-api.us-east-1.amazonaws.com/dev?text=india", requestOptions) .then(response => response.text()) .then(result => console.log(result)) .catch(error => console.log('error', error));
相关配置与测试情况:
- 已在API Gateway中启用CORS(配置了OPTIONS方法的CORS规则)
- 使用代理集成的Lambda返回内容正常
- GET请求不带Authorization头时,本地代码运行正常
- Postman中携带Authorization头调用API可正常返回结果
解决方案
- 检查API Gateway的OPTIONS方法配置,确保
Access-Control-Allow-Headers字段包含Authorization。因为请求携带自定义头(Authorization属于非简单请求头)时,浏览器预检请求要求明确允许该头。 - 确认OPTIONS方法的响应状态码为2xx(比如200或204)。如果用Lambda代理集成处理OPTIONS请求,要保证Lambda返回的响应状态码是2xx,同时包含以下CORS响应头:
Access-Control-Allow-Origin:设置为允许的前端域名(生产环境避免用*)Access-Control-Allow-Methods:包含GET方法Access-Control-Allow-Headers:明确包含Authorization
- 修改配置后重新部署API Gateway的对应阶段,API Gateway的配置变更必须部署后才会生效。
- 排查Lambda代理集成的OPTIONS响应,确认没有返回非2xx状态码,这是导致预检失败的常见原因。
内容的提问来源于stack exchange,提问作者Euphy
相关产品推荐
相关产品推荐

