当前位置:网站首页>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里面加了一个字段
果然不行了
配置了之后
正常
边栏推荐
- Expansion of Parallel I/O Port in Single Chip Microcomputer Development
- 【分层强化学习】HAC源码解读
- EA&UML日拱一卒-多任务编程超入门-(8)多任务安全的数据类
- Google Chrome (google) is set to translate Chinese, the translation option does not take effect or the translation option does not pop up
- 低压差线性稳压器MPQ2013A-AEC1品牌MPS国产替代
- 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
- 指令集数据产品如何设计和实现报表协同系统——基于指令集物联网操作系统的工业协同制造项目开发实践
- 自媒体人如何打造出爆文?这3种类型的文章最容易爆
- 7.28
- 循环神经网络(RNN)
猜你喜欢

微信开发者工具设置制表符大小为2

自媒体短视频标题怎么写?3个爆款标题,让你的视频收获更多流量

EA&UML日拱一卒-状态图::重画按钮状态图

经典论文-SqueezeNet论文及实践

【集训DAY16】KC‘s Can 【动态规划】

4 hotspot inquiry networks necessary for new media operations

Since the media how to write a short video title?Three hot style title, let your video gain more traffic

EA&UML日拱一卒-多任务编程超入门-(9)线程同步

servlet执行详解

账号权重怎么提升?自媒体运营的3个方法,帮你获得更多收益
随机推荐
18 Lectures on Disassembly of Multi-merchant Mall System Functions
机器人的运动范围
窗口函数笔记
4 hotspot inquiry networks necessary for new media operations
Go日志库——logrus
NumPy(一)
直播平台搭建,设置状态栏颜色
【集训DAY16】ALFA【凸壳】【计算几何】
[Cloud native Kubernetes] Build a Kubernetes cluster in binary (middle) - deploy node nodes
【集训DAY18】有趣的交换【模拟】【数学】
ZLMediaKit源码分析 - NotifyCenter
【集训DAY16】KC‘s Can 【动态规划】
Codeforces Round #805 (Div. 3) Summary
Douyin short video traffic acquisition strategy, mastering these will definitely be a hit
EA & UML Sun Arch - State Diagram :: Redraw Button State Diagram
Filebeat如何保证在日志文件被切割(或滚动rolling)时依然正确读取文件
Worthington Dissociation Enzymes: Collagenase and Four Basic Profiles
The basic parallel I/O port of single chip microcomputer development
对数据库进行增删改查操作
7.28
