Scott

cors跨域详解 2 years ago

go
cors
950个字符
共有145人围观

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