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

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, OPTIONS
    • Access-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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:34:40