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

React fetch调用AWS Lambda DELETE接口报no-cors模式不支持错误如何解决

问题1:DELETE is unsupported in no-cors mode报错解决

  • 浏览器no-cors模式仅支持GET、HEAD、POST三类简单请求,DELETE属于非简单请求,天然不支持该模式,必须删除fetch配置中的mode:'no-cors'字段。
  • 前端请求头中不需要加Access-Control-Allow-Origin,这个是服务端返回的响应头,前端主动添加会被视为自定义请求头,触发额外的预检规则,反而导致跨域失败,直接删掉这个请求头配置。

问题2:删除no-cors后仍跨域的排查和解决

第一步:补全serverless.yaml的CORS配置

你当前的配置只声明了允许的源和请求头,缺少允许的方法配置,需要显式添加allowMethods字段,声明允许DELETE和OPTIONS预检请求:

cors:
  origin: '*' # <-- Specify allowed origin
  headers: # <-- Specify allowed headers
    - Content-Type
    - X-Amz-Date
    - Authorization
    - X-Api-Key
    - X-Amz-Security-Token
    - X-Amz-User-Agent
  allowMethods: # 新增允许的方法配置
    - OPTIONS
    - GET
    - POST
    - DELETE

配置更新后重新部署Serverless服务生效。

第二步:确保Lambda返回响应包含CORS头

如果你使用的是Lambda代理集成模式,API Gateway不会自动添加CORS响应头,需要你在Lambda函数的返回结果中手动添加:

// Lambda函数返回结构示例
exports.handler = async (event) => {
  // 你的业务逻辑
  return {
    statusCode: 200,
    headers: {
      "Access-Control-Allow-Origin": "*",
      "Access-Control-Allow-Methods": "DELETE,OPTIONS,GET,POST",
      "Access-Control-Allow-Headers": "Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,X-Amz-User-Agent"
    },
    body: JSON.stringify({ status: "success" })
  };
};

修正后的前端请求代码

const deleteFoster = async (delid) =>  await fetch('URL' + delid, {
  method: "DELETE",
  cache: 'no-cache',
  credentials: 'same-origin',
  headers: {
    'Content-Type': 'application/json',
  },
})
.then(res => res.text())

故障排查技巧

如果配置后仍有跨域错误,打开浏览器控制台的网络面板,找到OPTIONS类型的预检请求,查看其返回的响应头和状态码:

  • 如果OPTIONS请求返回4xx/5xx状态码,说明API Gateway没有正确处理预检请求,需要检查Serverless配置是否正确部署
  • 如果OPTIONS请求返回200但响应头缺少对应的CORS字段,检查Lambda返回的响应头或者API Gateway的CORS配置是否生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:45:03