全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

如何使用Golang处理跨域JSON请求_使用Header和中间件实现CORS

Go语言处理CORS需正确设置响应头并处理OPTIONS预检请求,关键Header包括Access-Control-Allow-Origin、Methods、Headers等,推荐用中间件统一管理,生产环境须校验Origin白名单且避免通配符与credentials冲突。

Go语言处理跨域(CORS)JSON请求,核心是正确设置响应头,并在必要时处理预检(OPTIONS)请求。不需要第三方库也能轻松实现,关键在于理解浏览器的CORS机制和Gin/HTTP标准库中的控制点。

理解CORS关键Header

浏览器发起跨域请求时,服务端必须返回特定响应头,否则前端会被拦截。最常用且必需的有:

  • Access-Control-Allow-Origin:指定允许访问的源,如 "https://example.com" 或通配符 "*"(注意:"*" 不能与凭证(credentials)共存)
  • Access-Control-Allow-Methods:声明允许的HTTP方法,如 "GET, POST, PUT, DELETE, OPTIONS"
  • Access-Control-Allow-Headers:列出允许客户端携带的自定义请求头,如 "Content-Type, Authorization, X-Requested-With"
  • Access-Control-Expose-Headers(可选):声明哪些响应头可被前端JS读取(默认只暴露简单响应头)
  • Access-Control-Allow-Credentials(可选):设为 "true" 时,前端需配置 credentials: 'include',此时 Allow-Origin 不能为 "*"

手动设置Header(标准net/http)

适用于轻量服务或学习原理。在处理函数中直接写入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 白名单
  • 如果前端带 cookie 或 token(credentials: 'include'),后端必须设 Allow-Credentials: trueAllow-Origin 为具体域名
  • 某些反向代理(如 Nginx)可能覆盖响应头,确保它未清除或重写 CORS 相关 Header
  • 开发阶段可用 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小时内与您取得联系。