cors.Default()
首先不使用gin-contrib/cors中间件,而是自己写一个,看网上的大概就是这样,试了一下也是可以正常使用
func Cors(context *gin.Context) {
method := context.Request.Method
// 必须,接受指定域的请求,可以使用*不加以限制,但不安全
context.Header("Access-Control-Allow-Origin", "*")
// context.Header("Access-Control-Allow-Origin", context.GetHeader("Origin"))
fmt.Println(context.GetHeader("Origin"))
// 必须,设置服务器支持的所有跨域请求的方法
context.Header("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
// 服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段
context.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Token")
// 可选,设置XMLHttpRequest的响应对象能拿到的额外字段
context.Header("Access-Control-Expose-Headers", "Access-Control-Allow-Headers, Token")
// 可选,是否允许后续请求携带认证信息Cookir,该值只能是true,不需要则不设置
context.Header("Access-Control-Allow-Credentials", "true")
// 放行所有OPTIONS方法
if method == "OPTIONS" {
context.AbortWithStatus(http.StatusNoContent)
return
}
context.Next()
}
然后看是哪里的区别来着,瞅了一眼官网的典型例子
然后拉了下来参考上面改了些东西,就可以用了
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"*"},
AllowMethods: []string{"POST, GET, PUT, DELETE, OPTIONS"},
// 主要就是下面这两个,带上token就可以了
AllowHeaders: []string{"Content-Type, Content-Length, Token"},
ExposeHeaders: []string{"Access-Control-Allow-Headers, Token"},
AllowCredentials: true,
}))
为了测试这两个是怎么个一回事,又在header里面加了一个字段
果然不行了
配置了之后
正常