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

ReactJS用Axios请求Go Chi接口报CORS跨域错误,已配头仍失效如何解决?

问题排查与修复方案
  • 第一,前端错误添加了响应头属性:Access-Control-Allow-Origin是服务端返回的响应头,前端请求中添加该字段无意义,还会触发额外的预检校验。
  • 第二,Go服务未处理OPTIONS预检请求:你请求带了自定义的code请求头,属于非简单跨域请求,浏览器会先发送OPTIONS方法的预检请求确认跨域权限,当前你的路由仅绑定了GET方法,OPTIONS请求无法进入处理逻辑,拿不到对应的跨域响应头导致预检失败。
  • 第三,缺少允许自定义请求头的响应配置:即使返回了允许源的头,没有配置Access-Control-Allow-Headers允许code头,预检校验依然会失败。

修复步骤

前端代码修改

删除请求中多余的Access-Control-Allow-Origin头:

axios.defaults.headers.post['Content-Type'] ='application/x-www-form-urlencoded';
axios.get('http://localhost:8080/api/connection/getToken', {  
    headers: {
         code: code,
        } 
}).then(res => console.log(res));

后端Go代码修改

新增CORS中间件统一处理跨域逻辑,同时绑定到路由:

  1. 先定义CORS中间件:
func corsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 开发环境可使用*,生产环境替换为实际前端地址如http://localhost:3000
        w.Header().Set("Access-Control-Allow-Origin", "*")
        w.Header().Set("Access-Control-Allow-Methods", "GET, POST, OPTIONS, PUT, DELETE")
        // 允许自定义的code请求头
        w.Header().Set("Access-Control-Allow-Headers", "Content-Type, code")
        // 预检请求直接返回204状态码
        if r.Method == http.MethodOptions {
            w.WriteHeader(http.StatusNoContent)
            return
        }
        next.ServeHTTP(w, r)
    })
}
  1. 将中间件挂载到Chi路由:
func ConnexionRoutes() *chi.Mux {
    router := chi.NewRouter()
    // 注册CORS中间件
    router.Use(corsMiddleware)
    router.Get("/getToken", connectInit)
    return router
}
  1. 可删除原connectInit方法中重复的Access-Control-Allow-Origin头设置逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 13:57:02