解决思路:
安装所需的 CORS 中间件。
在 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/gin
和github.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 方法列表,这里包括了常见的GET
、POST
、PUT
、PATCH
、DELETE
、HEAD
和OPTIONS
。AllowHeaders
是允许的请求头列表,这里包含了Origin
、Content-Length
、Content-Type
和Authorization
。AllowCredentials
设为true
表示允许使用凭证(如 cookies)进行跨域请求。MaxAge
是预检请求的缓存时间,这里设置为 12 小时,在这个时间内,浏览器会缓存预检请求的结果,避免重复请求。
接下来,我们定义了一个简单的
/ping
路由,当接收到 GET 请求时,返回一个 JSON 响应。最后,使用
r.Run(":8080")
启动服务器,监听在 8080 端口。
请注意,使用 ["*"]
允许所有源是一种宽松的配置,在实际生产环境中,应该根据需要精确设置允许的源和其他配置,以确保应用的安全性。你可以根据具体的需求调整 CORS 中间件的配置。如果需要更复杂的 CORS 配置,可以参考 gin-contrib/cors