如何在基于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
相关产品推荐
相关产品推荐

