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

React中Axios POST请求未携带凭据且触发CORS错误求助

解决React中Axios POST请求无法携带Cookie的CORS问题

问题根源

POST请求属于非简单请求,浏览器会先发送OPTIONS预检请求验证权限,但你的Azure Function未处理OPTIONS请求,且默认CORS响应未返回Access-Control-Allow-Credentials: true头;而GET是简单请求,无需预检,直接使用函数返回的头,因此正常工作。

解决方案

1. 修改Azure Function代码,显式处理OPTIONS预检请求

更新函数配置,添加OPTIONS方法支持,并在请求处理中返回符合要求的CORS头:

// (localhost:3000)
app.http("addData", {
  methods: ["GET", "POST", "OPTIONS"], // 新增OPTIONS方法
  authLevel: "anonymous",
  route: "addData",
  handler: async (request, context) => {
    // 处理OPTIONS预检请求
    if (request.method === "OPTIONS") {
      return {
        status: 200,
        headers: {
          "Access-Control-Allow-Origin": "http://localhost:5173", // 必须指定具体源,不能用*
          "Access-Control-Allow-Credentials": "true",
          "Access-Control-Allow-Methods": "GET, POST, OPTIONS",
          "Access-Control-Allow-Headers": "Content-Type, Cookie" // 匹配实际请求携带的头
        },
        body: ""
      };
    }

    // 原有GET/POST逻辑
    const cookies = request.headers.get("cookie")
    context.log("cookies are ", cookies)
    return {
      status: 200,
      headers: {
        "Access-Control-Allow-Origin": "http://localhost:5173", // 同样指定具体源
        "Access-Control-Allow-Credentials": true,
      },
      body: "Data Added",
    }
  }
})

2. 确保local.settings.json配置正确

确认CORS设置为具体源,不能使用通配符*(带Cookie的请求不允许用*):

{
  "Host": {
    "CORS": "http://localhost:5173"
  }
}

关键注意点

  • 当请求携带credentials时,Access-Control-Allow-Origin必须是具体的域名,不能用*,否则浏览器会拒绝响应。
  • 预检请求(OPTIONS)和实际请求(POST/GET)都必须返回Access-Control-Allow-Credentials: true头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 05:43:16