Gin设置跨域
什么是跨域:在浏览器上,一个网页的代码想要访问另一个网页的资源,但这两个网页的域名不同,或者同一个域名下的不同子域名,也可能是端口号不同。例如,页面 A 想要读取页面 B 的信息,但由于安全策略的限制,这种跨域访问是被浏览器禁止的。这是为了保障用户信息在网络上的安全性。因此,跨域要通过其他方法,比如使用 JSONP 或者 CORS 等技术手段来实现。
我们新建一个cors.go的中间件
package middleware import ( "net/http" "github.com/gin-gonic/gin" ) // 设置跨域 func Cors() gin.HandlerFunc { return func(c *gin.Context) { //指定允许跨域请求的域名/请求头 c.Writer.Header().Set("Access-Control-Allow-Origin", "*") //指定允许的 HTTP 请求方法 c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE") // 指定允许的请求头字段 c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization") // 如果客户端发送的是 OPTIONS 请求,那么中间件会中止响应并返回 HTTP 状态码 204 if c.Request.Method == "OPTIONS" { c.AbortWithStatus(http.StatusNoContent) return } c.Next() } }然后注册到中间件中
r := gin.New() r.Use(middleware.Cors()) //跨域中间件,必须在路由之前这样就实现了跨域
温馨提示:r := gin.New() 创建一个新的 gin engine 实例,不会自动设置任何中间件,需要手动添加中间件。而r := gin.Default()则会自动使用 Logger 和 Recovery 中间件,这两个中间件对于记录日志和恢复从 panic 中恢复很有用。通常来说,如果你需要对 Gin 的行为进行更精细的控制,则应该选择r := gin.New();而如果你想快速地启动一个默认的 Gin 应用程序,则应该选择r := gin.Default()。
建议生产环境用r := gin.New()