| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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")
- }
|