什么是跨域问题
相同的源:如果两个页面的协议端口还有主机都相同,那这两个页面具有相同的源。
跨域问题
在请求发送之前,浏览器会先发送一个option请求给gin项目,之后gin项目需要告知浏览器授权访问的协议,端口或者方法,浏览器接收到后台传给前台的访问的这些控制信息,再进一步是否决定正式请求。 option请求也叫域请求
如何解决跨域问题
对于跨域问题的几种解决方法:
- 包括前端的jsond 和 反向代理
- 后端的api拦截option请求返回浏览器一个控制信息
如下代码是使用gin自己封装了一个CORS中间件进行跨域
使用gin解决跨域问题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| func CORSMiddleware() gin.HandlerFunc { return func(ctx *gin.Context) { fmt.Println("--------------------------允许跨域中间件--------------------------") ctx.Writer.Header().Set("Access-Control-Allow-Origin", "*") ctx.Writer.Header().Set("Access-Control-Max-Age", "86400") ctx.Writer.Header().Set("Access-Control-Allow-Methods", "*") ctx.Writer.Header().Set("Access-Control-Allow-Headers", "*") ctx.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
if ctx.Request.Method == http.MethodOptions { ctx.AbortWithStatus(http.StatusOK) } else { ctx.Next() } } }
|