0
点赞
收藏
分享

微信扫一扫

beego api 服务允许跨域访问,解决前端访问报Access-Control-Allow-Origin问题

潇湘落木life 2022-02-07 阅读 90

前端get请求拿数据,报错:No ‘Access-Control-Allow-Origin’ header is present on the requested

解决方案:

func main() {
	//InsertFilter是提供一个过滤函数
	beego.InsertFilter("*", beego.BeforeRouter, cors.Allow(&cors.Options{
		//允许访问所有源
		AllowAllOrigins: true,
		//可选参数"GET", "POST", "PUT", "DELETE", "OPTIONS" (*为所有)
		//其中Options跨域复杂请求预检
		AllowMethods:   []string{"*"},
		//指的是允许的Header的种类
		AllowHeaders: 	[]string{"Origin", "Authorization", "Access-Control-Allow-Origin", "content-type"},
		//公开的HTTP标头列表
		ExposeHeaders:	[]string{"Content-Length", "Access-Control-Allow-Origin"},
		//如果设置,则允许共享身份验证凭据,例如cookie
		AllowCredentials: true,
	}))

	beego.Run()
}

参数说明
AllowAllOrigins 允许全部来源设置为true则所有域名都可以访问本网站接口,可以将此配置换成为AllowOrigins:[“允许访问的域名”]
AllowMethods :允许的请求类型
AllowHeaders:允许的头部信息
ExposeHeaders:允许暴露的头信息
AllowCredentials:如果设置,允许共享AuthTuffic证书,如Cookie

问题的源因是因为OPTIONS请求
疑问1:什么是options请求
OPTIONS请求方法的主要用途有两个:
1、获取服务器支持的HTTP请求方法;
2、用来检查服务器的性能。例如:AJAX进行跨域请求时的预检,需要向另外一个域名的资源发送一个HTTP OPTIONS请求头,用以判断实际发送的请求是否安全。
这是浏览器给我们加上的,后端并没有做任何操作。
疑问2:为什么会用到options请求
这得从浏览器同源策略和跨域说起,具体可阅读也谈谈同源策略和跨域问题和浏览器同源政策及其规避方法,这里不在赘述。

解决跨域问题的方法有很多种,CORS是比较好的解决方案,我们的项目也是用的这种模式,这个模式会有”预检”的请求,也就是正常请求之前的options请求。

**CORS(Cross-Origin Requests Sharing跨域资源共享)**是一种网络浏览器的技术规范,它为Web服务器定义了一种方式,允许网页从不同的域访问其资源。而这种访问是被同源策略所禁止的。CORS系统定义了一种浏览器和服务器交互的方式来确定是否允许跨域请求。

参考 :
https://cloud.tencent.com/developer/article/1046663
https://blog.csdn.net/weixin_41646716/article/details/85070981

举报

相关推荐

0 条评论