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

如何在基于Gin的Golang服务端启用CORS跨域策略

Gin框架集成CORS跨域配置实现方案

第一步:改造CORS函数为Gin兼容中间件

你现有的CORS函数是标准http库格式,需要调整为Gin中间件格式,同时补充OPTIONS预检请求、允许请求方法的配置,避免PUT/DELETE等复杂请求跨域失败:

import "net/http"

func Cors() gin.HandlerFunc {
    return func(c *gin.Context) {
        // 配置跨域响应头
        c.Header("Access-Control-Allow-Origin", "*")
        c.Header("Access-Control-Allow-Headers", "Content-Type,access-control-allow-origin, access-control-allow-headers")
        c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
        
        // 处理浏览器预检请求,直接返回204状态码终止中间件链
        if c.Request.Method == http.MethodOptions {
            c.AbortWithStatus(http.StatusNoContent)
            return
        }
        // 执行后续业务逻辑
        c.Next()
    }
}

第二步:在主函数中注册中间件

需要在注册路由之前注册CORS中间件,才能让所有路由生效,修改后的main.go代码如下:

func main() {
    defer config.CloseDatabaseConnection(db)
    r := gin.Default()
    
    // 全局注册CORS中间件
    r.Use(Cors())
    
    dataRoutes := r.Group("api/item")
    {
        dataRoutes.GET("/", dataController.All)
        dataRoutes.POST("/", dataController.Insert)
        dataRoutes.GET("/:id", dataController.FindByID)
        dataRoutes.PUT("/:id", dataController.Update)
        dataRoutes.DELETE("/:id", dataController.Delete)
    }

    r.Run() 
}

注意事项

  • 生产环境建议将Access-Control-Allow-Origin的值从*替换为实际的前端业务域名,降低安全风险
  • 如果你只需要部分路由支持跨域,也可以不全局注册,改为给指定路由组单独注册:dataRoutes.Use(Cors())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:27:02