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里面加了一个字段

果然不行了

配置了之后

正常