起因
前后端分离的项目,由于浏览器的同源策略
,很容易导致跨域问题,前端在请求接口的时候报如下错误:
has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present
解决
其实跨域问题前后端两端都可以解决,这里讨论以go
的beego
框架的解决方法。
beego实现方式
我们可以以中间件的形式去统一解决,如把跨域方法封装到中间件中,在main.go
执行时就加载方法:
跨域解决代码:
import (
"github.com/astaxie/beego/plugins/cors"
)
/**
添加解决跨域请求问题,文件下载文件夹,支持表单伪造PUT,DELETE,PATCH,OPTIONS请求
*/
func CorsDomain() {
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,
}))
}
效果
未加跨域方法前:
添加后: