gin配置代理解决跨域问题
LYT
首页
分类
标签
项目
留言
友链
关于

gin配置代理解决跨域问题

2023年4月24日18时52分
2023年4月24日19时52分
golang
golang linux
浏览量:
总浏览量:
0

gin配置代理解决跨域问题

现在开发的项目一般都采取前后端分离的模式,前端调用的后端接口不属于同一个域(域名或端口不同),就会产生跨域问题,所以就需要通过配置代理来解决这个问题。在gin项目下的main.go文件里面粘贴一下字段

// 处理跨域请求,支持options访问 func Cors() gin.HandlerFunc { return func(c *gin.Context) { method := c.Request.Method c.Header("Access-Control-Allow-Origin", "http://localhost:5173") c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE") c.Header("Access-Control-Allow-Headers", "*") c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Cache-Control, Content-Language, Content-Type") c.Header("Access-Control-Allow-Credentials", "true") //放行所有OPTIONS方法 if method == "OPTIONS" { c.AbortWithStatus(http.StatusNoContent) } // 处理请求 c.Next() } } func main() { r := gin.Default() //解决跨域问题 r.Use(Cors()) }

用后端解决跨域的注意事项

对于附带身份凭证的请求,服务器不得设置 Access-Control-Allow-Origin 的值为' * '。这是因为请求的首部中携带了 Cookie 信息,如果 Access-Control-Allow-Origin 的值为 ' * ',请求将会失败。

而Access-Control-Allow-Credentials 则一般是服务器用来设置是否允许前端携带Cookies的标志位,withCredentials 是前端用来表示是否给服务器发请求的时候带上Cookies的标志位:

XMLHttpRequest withCredentials 标志设置为 true,从而向服务器发送 Cookies。因为这是一个简单 GET 请求,所以浏览器不会对其发起“预检请求”。但是,如果服务器端的响应中未携带 Access-Control-Allow-Credentials: true ,浏览器将不会把响应内容返回给请求的发送者。

基于以上的规则,如果我们需要发Cookies的话,前端withCredentials 后端的Access-Control-Allow-Credentials 都要设置为true,同时Access-Control-Allow-Origin 不能设置为星号,只能设置为单域名(推荐把这一项写成单域名)。