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

使用Axios向AWS Lambda发POST请求带data时遇CORS错误求助

问题分析与解决办法

核心问题

带data的POST请求会触发浏览器的CORS预飞(OPTIONS)请求,你的Lambda没正确处理这个OPTIONS请求,同时前端和Lambda的CORS配置都存在错误。

1. 前端代码错误修正

你在请求头里添加Access-Control-Allow-Origin是完全错误的——这个头是服务器返回给浏览器的响应头,不是前端发请求时需要携带的。直接删掉这个配置:

const config = {
  method: 'post',
  url: 'lambdalink',
  // 移除错误的请求头配置
  data: {
    info: JSON.stringify(data)
  }
};

Axios(config)
.then(res => console.log(JSON.stringify(res.data)))
.catch(err => console.log(err));

2. Lambda端CORS配置修正

你的Lambda CORS配置有三个关键问题:

  • Access-Control-Allow-Origin不能设置多个值,只能是单个*或者单个具体域名(比如http://localhost:4200,不要加末尾斜杠)
  • Access-Control-Allow-Headers配置错误,应该包含请求实际用到的头,比如Content-Type(因为你发送的是JSON数据,请求头会自动携带Content-Type: application/json),而非access-control-allow-origin
  • 必须允许OPTIONS方法,因为预飞请求使用的是OPTIONS方法

正确的Lambda响应头配置(以Node.js为例)

不管是OPTIONS请求还是POST请求,都要返回以下头信息:

const corsHeaders = {
  'Access-Control-Allow-Origin': 'http://localhost:4200', // 也可以用'*'
  'Access-Control-Allow-Headers': 'Content-Type',
  'Access-Control-Allow-Methods': 'OPTIONS,POST'
};

Lambda必须处理OPTIONS请求

在Lambda函数开头判断请求方法,如果是OPTIONS,直接返回带CORS头的200响应,无需执行业务逻辑:

exports.handler = async (event) => {
  // 处理预飞OPTIONS请求
  if (event.httpMethod === 'OPTIONS') {
    return {
      statusCode: 200,
      headers: corsHeaders,
      body: ''
    };
  }

  // 处理POST业务逻辑
  if (event.httpMethod === 'POST') {
    // 这里写你的业务代码
    return {
      statusCode: 200,
      headers: corsHeaders,
      body: JSON.stringify({ result: 'success' })
    };
  }

  // 其他请求方法返回405不允许
  return {
    statusCode: 405,
    headers: corsHeaders,
    body: JSON.stringify({ error: 'Method not allowed' })
  };
};

为什么不带data时能正常工作?

不带data的POST属于简单请求,浏览器不会发送预飞OPTIONS请求,直接发送POST,只要Lambda返回了Access-Control-Allow-Origin头就能通过校验。但带data且为JSON格式时,请求的Content-Type是application/json,属于非简单请求,浏览器必须先发送OPTIONS预飞请求确认权限,此时如果Lambda没处理OPTIONS,就会返回不带CORS头的响应,导致报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:09:17