Skip to main content

cors跨域详解

· One min read

package middlewares

import (
"github.com/gin-gonic/gin"
"net/http"
)

func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method

//告诉浏览器 你的Header里面可以添加什么

c.Header("Access-Control-Allow-Origin", "*") //固定写法
//哪些Headers可以加:我们加一些常用的,当然想用什么加什么,把你要用的加进去,我们现在用的是x-token
//虽然和下面的冲突了,但是没关系
c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token,Authorization,Token,x-token")
//哪些方法可以加
c.Header("Access-Control-Allow-Methods", "POST,GET,PUT,DELETE,OPTIONS,PATCH")
//哪些Headers可以加
c.Header("Access-Control-Expose-Headers", "Content-Length,Access-Control-Allow-Origin,Access-Control-Allow-Methods,Content-Type")
c.Header("Access-Control-Allow-Credentials", "true")

//前端如果跨域,浏览器就会发起OPTIONS请求 询问后端是否安全?后端处理这个OPTIONS请求即可
if method == "OPTIONS" {
//如果不像返回内容 就用下面的方法
c.AbortWithStatus(http.StatusNoContent)
}
}
}