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

使用onRequest云函数时出现CORS错误的原因及排查方案

报错原因

跨域配置失效的核心原因有两点:

  • 你虽然引入了cors依赖并做了初始化,但没有把cors中间件注册到请求处理流程中,这部分配置完全没有生效
  • 手动设置Access-Control-Allow-Origin的逻辑没有覆盖浏览器跨域场景自动发起的OPTIONS预检请求,预检请求无法拿到合规的CORS响应头时,浏览器会直接拦截请求抛出跨域错误。
修复方法

二选一即可:

方案1:使用cors中间件(推荐)

不要混用手动配头和cors中间件,直接把业务逻辑包裹在cors中间件的回调中,cors会自动处理所有跨域逻辑包括OPTIONS预检响应:

const cors = require('cors')({origin: true});
export const testFunction = functions.https.onRequest((req, res) => {
  cors(req, res, () => {
    const text = req.body.text;
    res.send({text: text});
  });
});

方案2:手动配置CORS头

如果不想引入第三方依赖,需要单独拦截OPTIONS请求并返回对应CORS头:

export const testFunction = functions.https.onRequest((req, res) => {
  res.set("Access-Control-Allow-Origin", "*");
  res.set("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
  res.set("Access-Control-Allow-Headers", "Content-Type");
  // 预检请求直接返回204,不执行业务逻辑
  if (req.method === "OPTIONS") {
    return res.status(204).send("");
  }
  const text = req.body.text;
  res.send({text: text});
});

补充排查点:如果云函数前置了API网关、CDN或者WAF服务,需要确认这些服务没有拦截OPTIONS请求,否则即使云函数配置正确,预检请求也会被拦截导致跨域报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 23:21:31