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 框架为例:
立即学习“go语言免费学习笔记(深入)”;
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 请求验证响应头,再联调前端,效率更高。
以上就是如何使用Golang处理跨域JSON请求_使用Header和中间件实现CORS的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号