H5W3
当前位置:H5W3 > go > 正文

【go】Beego允许跨域请求问题

场景:

A项目为Beego后端服务,B项目为某前端UI服务
B服务向A服务发起跨域请求
A项目处理跨域方法,

main.go文件中,添加如下

【go】Beego允许跨域请求问题

结果

浏览器提示:

【go】Beego允许跨域请求问题

A项目后台提示:

【go】Beego允许跨域请求问题

我的问题
显然,问题在于跨域请求时,预检请求没有通过,,但是A后台虽然提示 OPTIONS no match,但是返回值还是200,这是为什么呢?以及怎么解决OPTIONS 不通过问题呢???

我也遇到了这个问题,如下配置,使用websocket请求,提示websocket: ‘Origin’ header value not allowed,同求解决方案

beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
AllowAllOrigins:  true,
AllowMethods:     []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
AllowHeaders:     []string{"Origin", "Authorization", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
ExposeHeaders:    []string{"Content-Length", "Access-Control-Allow-Origin", "Access-Control-Allow-Headers", "Content-Type"},
AllowCredentials: true,
}))

Access-Control-Allow-Origin 添加这个响应头就可以了,
Option第一次请求的时候,发现存在这个头,并且这个头的设置允许你的域名就可以返回200 ,然后客户端再次发起真正的请求

服务端加响应头,或者反向代理。

虽然我没用过 beego 但是可以强答一下,允许的 header 设置完之后需要在中间件匹配 method = OPTIONS 的请求同时立即结束请求并响应 200

另外推荐加入 Access-Control-Max-Age 的 header 减少前端 preflight 的请求次数

回答

本文地址:H5W3 » 【go】Beego允许跨域请求问题

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址