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

AWS静态网站POST请求CORS错误排查:Origin不匹配

解决CORS源匹配错误(Access-Control-Allow-Origin带末尾斜杠)

核心问题定位

错误提示明确说明:预检请求返回的Access-Control-Allow-Origin头值是https://example.net/(带末尾斜杠),但你的请求源是https://example.net(无斜杠)。CORS对源的匹配是严格字符串匹配,哪怕仅差一个斜杠也会触发拦截。

逐一排查修复步骤

1. 修复API Gateway的CORS配置(优先级最高)

你提到配置CORS后保存的设置消失,这是配置未生效的典型表现:

  • 进入API Gateway控制台,找到/contact资源,点击启用CORS:
    • 确保Access-Control-Allow-Origin填写https://example.net(绝对不能加末尾斜杠)
    • 勾选Access-Control-Allow-Methods中的POST和OPTIONS
    • 确认Access-Control-Allow-Headers包含Content-Type(适配你AJAX请求的contentType配置)
  • 配置完成后必须重新部署到prod阶段,API Gateway的CORS配置仅在部署后生效
  • 如果仍无法保存设置,尝试删除现有/contact资源,重新创建并配置CORS后部署

2. 修正Lambda函数的响应头

当前Lambda返回*虽不会导致斜杠问题,但为了严格匹配源,建议修改为指定值:

exports.handler = async (event) => {
    const response = {
        statusCode: 200,
        headers: {
            "Access-Control-Allow-Origin": "https://example.net", // 无末尾斜杠
            "Access-Control-Allow-Headers": "Content-Type",
            "Access-Control-Allow-Methods": "POST, OPTIONS"
        },
        body: JSON.stringify("提交成功")
    };
    return response;
};

注:若API Gateway已配置CORS,Lambda的响应头会与网关配置合并,确保两边源一致即可。

3. 检查CloudFront响应头策略

你使用的CORS-With-Preflight策略需确认源配置正确:

  • 进入CloudFront控制台,找到你的响应头策略
  • 查看Access-Control-Allow-Origin的值,确保是https://example.net(无斜杠)
  • 若使用AWS托管策略,建议创建自定义策略,手动指定正确的源

4. 验证S3的CORS配置(辅助检查)

虽然请求目标是API Gateway,但仍需确保S3配置无冲突:

<CORSConfiguration>
    <CORSRule>
        <AllowedOrigin>https://example.net</AllowedOrigin>
        <AllowedMethod>GET</AllowedMethod>
        <AllowedMethod>POST</AllowedMethod>
        <AllowedHeader>*</AllowedHeader>
    </CORSRule>
</CORSConfiguration>

5. 客户端代码规范优化

将AJAX中的crossDomain: "true"改为布尔值true,虽非问题根源,但更符合语法规范:

$.ajax({
    type: "POST",
    url: URL,
    dataType: "json",
    crossDomain: true, // 修改为布尔值
    contentType: "application/json; charset=utf-8",
    data: JSON.stringify(data),
    // ... 其余代码
});

验证方法

修改配置后,重新提交表单,通过Chrome开发者工具网络标签检查:

  1. 找到OPTIONS预检请求,查看响应头Access-Control-Allow-Origin是否为https://example.net(无斜杠)
  2. 确认该值与请求头Origin完全一致
  3. 预检请求通过后,再检查POST请求的响应头是否符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:20:41