AWS API Gateway配置Lambda邮件函数遇OPTIONS预请求持续403错误
解决API Gateway OPTIONS预请求403错误的实操方案
这种OPTIONS预请求返回403的问题我碰到过好多次,核心原因基本都是CORS配置没踩对细节,尤其是用Lambda代理集成的场景,容易忽略几个关键步骤。结合你的场景,我给你拆解下具体解决方法:
1. 先补全API Gateway的CORS配置(别忘部署!)
很多人以为开了资源的CORS就完事,但Lambda代理模式下,API Gateway不会自动生成OPTIONS请求的处理逻辑,得手动配置:
- 找到你的
contactformlambda资源,点击顶部的「Actions」→「Enable CORS」 - 关键参数设置:
Access-Control-Allow-Origin:填你前端的具体域名(比如https://your-frontend.com),测试阶段可以临时用*(生产环境别用通配符)Access-Control-Allow-Methods:必须包含POST, OPTIONSAccess-Control-Allow-Headers:根据你前端发送的请求头填写,比如Content-Type,也可以用*覆盖
- 配置完成后一定要点击「Deploy API」,选择你的部署阶段(比如
prod),否则配置不会生效。
2. 让Lambda函数主动处理OPTIONS请求
因为是Lambda代理集成,API Gateway会把所有请求直接转发给Lambda,包括OPTIONS预请求。你的Lambda必须专门处理OPTIONS请求并返回合规的CORS头:
以Node.js的Lambda为例,给你个参考代码片段:
exports.handler = async (event) => { // 优先处理OPTIONS预请求 if (event.httpMethod === 'OPTIONS') { return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': 'https://your-frontend.com', 'Access-Control-Allow-Methods': 'POST, OPTIONS', 'Access-Control-Allow-Headers': 'Content-Type' }, body: JSON.stringify('Preflight OK') }; } // 处理POST请求的业务逻辑 if (event.httpMethod === 'POST') { // 你的表单处理代码... return { statusCode: 200, headers: { 'Access-Control-Allow-Origin': 'https://your-frontend.com', 'Content-Type': 'application/json' }, body: JSON.stringify({ message: '表单提交成功' }) }; } // 其他请求方法返回405 return { statusCode: 405, headers: { 'Access-Control-Allow-Origin': 'https://your-frontend.com' }, body: JSON.stringify('不支持的请求方法') }; };
重点:不管是OPTIONS还是POST请求,都必须带上Access-Control-Allow-Origin头,否则浏览器会直接拦截响应。
3. 排查资源策略的限制
去API Gateway的「Resource Policy」页面检查,有没有拒绝OPTIONS请求的规则,或者确保策略允许你的前端域名访问所有请求方法(包括OPTIONS)。
4. 清除浏览器缓存
浏览器会缓存OPTIONS请求的结果,如果之前配置错误,可能需要清除缓存或者用无痕模式测试,避免旧缓存干扰结果。
先从前两步入手,基本能解决90%的此类问题,我之前踩过的坑大多是忘了部署API或者Lambda没处理OPTIONS请求。
内容的提问来源于stack exchange,提问作者Michael Coxon
相关产品推荐
相关产品推荐

