1、问题背景
使用golang gin框架开发websockt链接接口,使用的websocket库是 “github.com/gorilla/websocket”,前端使用vue,postman测试接口没问题,前端同事本地请求报错(request origin not allowed by Upgrader.CheckOrigin:403).

2、出错原因
前端同事在本地调试代码,会启动代理工具,代理线上接口域名,所以此处请求存在跨域,如果是跨域请求的时候会报这个错误:
request origin not allowed by Upgrader.CheckOrigin

3、后端错误配置

var upgrader = websocket.Upgrader{}

func NewKefuServer(c *gin.Context) {
	conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
	if err != nil {
		conf.Logger.Error("upgrade", zap.Error(err))
		return
	}
	db, err := client.GetDbClient()
	if err != nil {
		conf.Logger.Error("db err", zap.Error(err))
		return
	}
}	

4、正确配置

var upgrader = websocket.Upgrader{
	ReadBufferSize:  1024,
	WriteBufferSize: 1024,
	// 解决跨域问题
	CheckOrigin: func(r *http.Request) bool {
		return true
	},
}


func NewKefuServer(c *gin.Context) {
	conn, err := upgrader.Upgrade(c.Writer, c.Request, nil)
	if err != nil {
		conf.Logger.Error("upgrade", zap.Error(err))
		return
	}
	db, err := client.GetDbClient()
	if err != nil {
		conf.Logger.Error("db err", zap.Error(err))
		return
	}
}

参考:https://www.cnblogs.com/taoshihan/p/13855171.html

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐