package middleware import "net/http" // CorsMiddleware 跨域请求处理中间件 type CorsMiddleware struct { } // NewCorsMiddleware 新建跨域请求处理中间件 func NewCorsMiddleware() *CorsMiddleware { return &CorsMiddleware{} } // Handle 跨域请求处理 func (m *CorsMiddleware) Handle(next http.HandlerFunc) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { setHeader(w) // 放行所有 OPTIONS 方法 if r.Method == "OPTIONS" { w.WriteHeader(http.StatusNoContent) return } // 处理请求 next(w, r) } } // Handler 跨域请求处理器 func (m *CorsMiddleware) Handler() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { setHeader(w) if r.Method == "OPTIONS" { w.WriteHeader(http.StatusNoContent) } else { w.WriteHeader(http.StatusNotFound) } }) } // setHeader 设置响应头 func setHeader(w http.ResponseWriter) { w.Header().Set("Access-Control-Allow-Origin", "*") w.Header().Set("Access-Control-Allow-Headers", "*") w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS, PATCH") w.Header().Set("Access-Control-Expose-Headers", "Content-Length, Content-Type, Access-Control-Allow-Origin, Access-Control-Allow-Headers") w.Header().Set("Access-Control-Allow-Credentials", "true") }