Go语言处理CORS需正确设置响应头并处理OPTIONS预检请求,关键Header包括Access-Control-Allow-Origin、Methods、Headers等,推荐用中间件统一管理,生产环境须校验Origin白名单且避免通配符与credentials冲突。
Go语言处理跨域(CORS)JSON请求,核心是正确设置响应头,并在必要时处理预检(OPTIONS)请求。不需要第三方库也能轻松实现,关键在于理解浏览器的CORS机制和Gin/HTTP标准库中的控制点。
浏览器发起跨域请求时,服务端必须返回特定响应头,否则前端会被拦截。最常用且必需的有:
"https://example.com" 或通配符 "*"(注意:"*" 不能与凭证(credentials)共存)"GET, POST, PUT, DELETE, OPTIONS"
"Content-Type, Authorization, X-Requested-With"
"true" 时,前端需配置 credentials: 'include',此时 Allow-Origin 不能为 "*"
适用于轻量服务或学习原理。在处理函数中直接写入Header即可:
func jsonHandler(w http.ResponseWriter, r *http.Request) {
// 设置CORS头
w.Header().Set("Access-Control-Allow-Origin", "https://myapp.com")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
w.Header().Set("Access-Control-Allow-Credentials", "true")
// 处理预检请求
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
// 正常JSON响应
w.Header().Set("Content-Type", "application/json")
json.NewEncoder(w).Encode(map[string]string{"message": "success"})
}
避免每个handler重复写Header,封装成中间件更清晰、易维护。以 Gin 框架为例:
func CORSMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
origin := c.Request.Header.Get("Origin")
if origin != "" {
c.Header("Access-Control-Allow-Origin", origin)
c.Header("Access-Control-Allow-Methods", "GET, POST, PUT, PATCH, DELETE, OPTIONS")
c.Header("Access-Control-Allow-Headers", "Content-Type, Authorization, X-Requested-With")
c.Header("Access-Control-Allow-Credentials", "true")
c.Header("Access-Control-Expose-Headers", "Content-Length, X-Total-Count")
}
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(http.StatusOK)
return
}
c.Next()
}
}
// 使用方式
r := gin.Default()
r.Use(CORSMiddleware())
r.POST("/api/data", handleJSON)
注意:Gin 默认不自动处理 OPTIONS 请求,所以中间件里要显式拦截并返回 200;若用 net/http,需注册 http.HandleFunc("OPTIONS", ...) 或复用同一 handler 判断 method。
实际部署时别忽略这些细节:
"*",尤其涉及登录态或敏感操作时,应校验 Origin 白名单credentials: 'include'),后端必须设 Allow-Credentials: true 且 Allow-Origin 为具体域名localhost:3000 等地址测试,但线上务必用真实域名做 Origin 校验基本上就这些。CORS本身
不复杂,但容易因一个Header漏设或值冲突导致前端静默失败。建议先用 curl 模拟 OPTIONS 请求验证响应头,再联调前端,效率更高。
# js
# 前端
# json
# go
# nginx
# cookie
# golang
# go语言
# 浏览器
# app
# access
# 后端
# 中间件
# gin
# 封装
# include
相关文章:
如何撰写建站申请书?关键要点有哪些?
建站之星后台密码如何安全设置与找回?
如何登录建站主机?访问步骤全解析
微信推文制作网站有哪些,怎么做微信推文,急?
如何通过商城免费建站系统源码自定义网站主题?
如何在自有机房高效搭建专业网站?
如何用西部建站助手快速创建专业网站?
制作网站的基本流程,设计网站的软件是什么?
阿里云高弹*务器配置方案|支持分布式架构与多节点部署
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
常州企业建站如何选择最佳模板?
想学网站制作怎么学,建立一个网站要花费多少?
如何快速重置建站主机并恢复默认配置?
c++怎么用jemalloc c++替换默认内存分配器【性能】
矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?
,柠檬视频怎样兑换vip?
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
如何选择长沙网站建站模板?H5响应式与品牌定制哪个更优?
ppt制作免费网站有哪些,ppt模板免费下载网站?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
电商网站制作价格怎么算,网上拍卖流程以及规则?
网站制作难吗安全吗,做一个网站需要多久时间?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
建站之星代理平台如何选择最佳方案?
企业网站制作公司网页,推荐几家专业的天津网站制作公司?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
如何选择高性价比服务器搭建个人网站?
如何快速完成中国万网建站详细流程?
攀枝花网站建设,攀枝花营业执照网上怎么年审?
建站主机服务器选购指南:轻量应用与VPS配置解析
网站网页制作专业公司,怎样制作自己的网页?
如何在IIS管理器中快速创建并配置网站?
整人网站在线制作软件,整蛊网站退不出去必须要打我是白痴才能出去?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
如何通过免费商城建站系统源码自定义网站主题与功能?
如何在阿里云购买域名并搭建网站?
东莞专业制作网站的公司,东莞大学生网的网址是什么?
宝塔Windows建站如何避免显示默认IIS页面?
详解jQuery停止动画——stop()方法的使用
济南企业网站制作公司,济南社保单位网上缴费步骤?
c# 在高并发场景下,委托和接口调用的性能对比
如何制作算命网站,怎么注册算命网站?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
如何在VPS电脑上快速搭建网站?
如何自定义建站之星模板颜色并下载新样式?
如何构建满足综合性能需求的优质建站方案?
如何批量查询域名的建站时间记录?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
为什么Go需要go mod文件_Go go mod文件作用说明
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
*请认真填写需求信息,我们会在24小时内与您取得联系。