package server import ( "context" "github.com/go-kratos/kratos/v2/middleware" "github.com/go-kratos/kratos/v2/transport" "github.com/go-kratos/kratos/v2/transport/http" ) // 跨域中间件 func MWCors() middleware.Middleware { return func(handler middleware.Handler) middleware.Handler { return func(ctx context.Context, req interface{}) (reply interface{}, err error) { if tr, ok := transport.FromServerContext(ctx); ok { // Do something on entering //在响应头中添加特定的头信息 ht := tr.(http.Transporter) ht.ReplyHeader().Set("Access-Control-Allow-Origin", "*") ht.ReplyHeader().Set("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, PATCH,OPTIONS") ht.ReplyHeader().Set("Access-Control-Allow-Credentials", "true") ht.ReplyHeader().Set("Access-Control-Allow-Headers", "Access-Control-Allow-Credentials,Content-Type,X-Requested-With ,Content-Length, User-Agent,Authorization") defer func() { // Do something on exiting //method := c.Request.Method //origin := c.Request.Header.Get("Origin") //if origin != "" { // c.Header("Access-Control-Allow-Origin", origin) // c.Header("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS") // c.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Token") // c.Header("Access-Control-Expose-Headers", "Access-Control-Allow-Headers, Token") // c.Header("Access-Control-Max-Age", "172800") // c.Header("Access-Control-Allow-Credentials", "true") // c.Set("content-type", "application/json") //} //if method == "OPTIONS" { // //c.JSON(200, Controller.R(200, nil, "Options Request")) // c.AbortWithStatus(http.StatusNoContent) //} //c.Next() }() } return handler(ctx, req) } } }