正确设置CORS响应头是Golang处理跨域JSON请求的关键,需配置Access-Control-Allow-Origin、Methods和Headers;推荐使用中间件或gorilla/handlers库统一管理,确保OPTIONS预检请求被正确响应,从而实现安全跨域通信。

在Golang中处理跨域JSON请求,关键是正确设置HTTP响应头中的CORS(跨源资源共享)字段。只要前端发起的是跨域请求,后端必须明确允许,否则浏览器会拦截响应。下面介绍几种常见且实用的处理方式。
当浏览器发现请求的目标域名、协议或端口与当前页面不一致时,就会触发跨域请求。默认情况下,这种请求被禁止。要让Golang服务支持跨域,需在响应头中添加以下字段:
对于带有认证信息或自定义头的请求,浏览器会先发送一个OPTIONS预检请求,服务器必须正确响应才能继续。
最直接的方式是在每个处理函数中手动添加响应头:
立即学习“go语言免费学习笔记(深入)”;
func handler(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
// 正常处理逻辑
json.NewEncoder(w).Encode(map[string]string{"message": "Hello"})
}
这种方式适合简单项目,但重复代码多,维护不便。
Easily find JSON paths within JSON objects using our intuitive Json Path Finder
30
更推荐的做法是封装一个CORS中间件,在路由前统一处理跨域相关逻辑:
func corsMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.Header().Set("Access-Control-Allow-Origin", "http://localhost:3000")
w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")
if r.Method == "OPTIONS" {
w.WriteHeader(http.StatusOK)
return
}
next.ServeHTTP(w, r)
})
}
// 使用示例
http.Handle("/api/data", corsMiddleware(http.HandlerFunc(dataHandler)))
这样所有经过该中间件的路由都会自动支持跨域,代码更整洁,也便于统一管理策略。
如果项目依赖较多,可以直接使用成熟的库简化操作。例如github.com/gorilla/handlers提供了现成的CORS支持:
import "github.com/gorilla/handlers"
http.ListenAndServe(":8080",
handlers.CORS(
handlers.AllowedOrigins([]string{"http://localhost:3000"}),
handlers.AllowedMethods([]string{"GET", "POST", "PUT", "DELETE", "OPTIONS"}),
handlers.AllowedHeaders([]string{"Content-Type", "Authorization"}),
)(router),
)
这个方法配置灵活,适合中大型项目,还能与其他中间件无缝集成。
基本上就这些。关键在于确保OPTIONS请求能被正确响应,并设置合适的响应头。只要前端能收到合法的CORS头,JSON数据就能顺利传输。
以上就是如何在Golang中处理跨域JSON请求的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号