当前位置:网站首页>go语言解决自定义header的跨域问题
go语言解决自定义header的跨域问题
2022-07-30 00:16:00 【sywdebug】
此篇背景:最近在写用go语言开发公司web端,写到使用jwt做中间件实现权限和身份认证,想到把token不作为参数传递了,而是放在header里面,然后用go获取header里面的token,省的乱七八糟的api接口都带token参数,此前我是使用axios做前端请求,使用gin-contrib/cors中间件的
cors.Default()完成跨域,以为使用这个就完全不用管的配全了,毕竟官网也写了允许所有来源
但是将token放到header后就是不行,不放就可以,查了下资料解决问题,记录一下
首先不使用gin-contrib/cors中间件,而是自己写一个,看网上的大概就是这样,试了一下也是可以正常使用
func Cors(context *gin.Context) {
method := context.Request.Method
// 必须,接受指定域的请求,可以使用*不加以限制,但不安全
context.Header("Access-Control-Allow-Origin", "*")
// context.Header("Access-Control-Allow-Origin", context.GetHeader("Origin"))
fmt.Println(context.GetHeader("Origin"))
// 必须,设置服务器支持的所有跨域请求的方法
context.Header("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE, OPTIONS")
// 服务器支持的所有头信息字段,不限于浏览器在"预检"中请求的字段
context.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Token")
// 可选,设置XMLHttpRequest的响应对象能拿到的额外字段
context.Header("Access-Control-Expose-Headers", "Access-Control-Allow-Headers, Token")
// 可选,是否允许后续请求携带认证信息Cookir,该值只能是true,不需要则不设置
context.Header("Access-Control-Allow-Credentials", "true")
// 放行所有OPTIONS方法
if method == "OPTIONS" {
context.AbortWithStatus(http.StatusNoContent)
return
}
context.Next()
}
然后看是哪里的区别来着,瞅了一眼官网的典型例子
然后拉了下来参考上面改了些东西,就可以用了
r.Use(cors.New(cors.Config{
AllowOrigins: []string{"*"},
AllowMethods: []string{"POST, GET, PUT, DELETE, OPTIONS"},
// 主要就是下面这两个,带上token就可以了
AllowHeaders: []string{"Content-Type, Content-Length, Token"},
ExposeHeaders: []string{"Access-Control-Allow-Headers, Token"},
AllowCredentials: true,
}))
为了测试这两个是怎么个一回事,又在header里面加了一个字段
果然不行了
配置了之后
正常
边栏推荐
猜你喜欢
随机推荐
try_catch捕获异常
call、apply 以及 bind 的区别和用法
Add, delete, modify and query the database
7.27
Paper Intensive Reading - YOLOv3: An Incremental Improvement
Decision tree principle and code implementation
Some personal understandings about MySQL indexes (partially refer to MySQL45 lectures)
Music theory & guitar skills
i.MX6U-driver development-3-new character driver
How to design and implement report collaboration system for instruction set data products——Development practice of industrial collaborative manufacturing project based on instruction set IoT operating
2022年ps应该选择哪个版本
First Normal Form, Second Normal Form, Third Normal Form
【分层强化学习】HAC源码解读
rk-boot framework combat (1)
【集训DAY16】KC‘s Can 【动态规划】
EA&UML日拱一卒-多任务编程超入门-(9)线程同步
Mysql internal and external connections
QTableWidget usage example
『牛客|每日一题』走迷宫
Towhee 每周模型










