Gin 框架中使用 CORS(跨域资源共享)

admin, 16 一月, 2025

以下是在 Gin 框架中使用 CORS(跨域资源共享)的步骤:

解决思路

  1. 安装所需的 CORS 中间件。

  2. 在 Gin 应用中引入并使用该中间件。

代码示例

package main

import (
   "github.com/gin-gonic/gin"
   "github.com/gin-contrib/cors"
)

func main() {
   // 创建一个 Gin 实例
   r := gin.Default()

   // 配置 CORS 中间件
   r.Use(cors.New(cors.Config{
       // 允许所有来源,可根据需要修改
       AllowOrigins: []string{"*"},
       // 允许的 HTTP 方法
       AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},
       // 允许的 HTTP 头
       AllowHeaders: []string{"Origin", "Content-Length", "Content-Type", "Authorization"},
       // 允许凭证
       AllowCredentials: true,
       // 允许跨域的最大时间,可根据需要修改
       MaxAge: 12 * time.Hour,
  }))

   // 定义一个路由
   r.GET("/ping", func(c *gin.Context) {
       c.JSON(200, gin.H{
           "message": "pong",
      })
  })

   // 启动服务器
   r.Run(":8080")
}

代码解释

  • 首先,我们导入了 github.com/gin-gonic/gingithub.com/gin-contrib/cors 包。

  • main 函数中,创建了一个 gin.Default() 实例,这是一个带有默认中间件的 Gin 引擎。

  • 然后,使用

    r.Use(cors.New(cors.Config{...}))

    来配置 CORS 中间件。

    • AllowOrigins 是一个字符串切片,指定允许的源(Origin),这里使用 ["*"] 表示允许所有源,但在实际生产中,为了安全应该更具体地指定源,例如 ["http://example.com", "https://example.com"]

    • AllowMethods 是允许的 HTTP 方法列表,这里包括了常见的 GETPOSTPUTPATCHDELETEHEADOPTIONS

    • AllowHeaders 是允许的请求头列表,这里包含了 OriginContent-LengthContent-TypeAuthorization

    • AllowCredentials 设为 true 表示允许使用凭证(如 cookies)进行跨域请求。

    • MaxAge 是预检请求的缓存时间,这里设置为 12 小时,在这个时间内,浏览器会缓存预检请求的结果,避免重复请求。

  • 接下来,我们定义了一个简单的 /ping 路由,当接收到 GET 请求时,返回一个 JSON 响应。

  • 最后,使用 r.Run(":8080") 启动服务器,监听在 8080 端口。

请注意,使用 ["*"] 允许所有源是一种宽松的配置,在实际生产环境中,应该根据需要精确设置允许的源和其他配置,以确保应用的安全性。你可以根据具体的需求调整 CORS 中间件的配置。如果需要更复杂的 CORS 配置,可以参考 gin-contrib/cors 库的官方文档。