文章目录
- 确保安装以下依赖: go get -u github.com/gorilla/mux go get -u github.com/rs/cors
- package main import ( “fmt” “net/http” “github.com/gorilla/mux” “github.com/rs/cors” ) func main() { router := mux.NewRouter() router.HandleFunc(“/api”, func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, “Hello, CORS!”) }).Methods(“GET”) // ❌ 错误:中间件未被真正使用 c := cors.New(cors.Options{ AllowedOrigins: []string{“*”}, }) http.ListenAndServe(“:8080”, router) // 忽略了 cors.Handler } 虽然写了 cors.New(…),但实际上并没有将其作用于 HTTP 服务器上。这相当于创建了一个 CORS 配置但未使用。
- 你需要将 cors.Handler 包装你的主路由器: func main() { router := mux.NewRouter() router.HandleFunc(“/api”, func(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, “Hello, CORS!”) }).Methods(“GET”) // ✅ 正确:将 CORS 中间件包裹 router c := cors.New(cors.Options{ AllowedOrigins: []string{“*”}, AllowedMethods: []string{“GET”, “POST”, “PUT”, “DELETE”}, AllowedHeaders: []string{“Content-Type”}, AllowCredentials: true, }) handler := c.Handler(router) http.ListenAndServe(“:8080”, handler) }
- 你可以通过以下方式测试: 用浏览器或 Postman 发起请求。 检查返回的响应头中是否有: Access-Control-Allow-Origin: * 这说明服务端已允许跨域请求。
- 配置项 说明 AllowedOrigins 允许的来源,例如:[]string{"http://localhost:3000"} 或 * 表示所有 AllowedMethods 支持的方法,如 GET, POST, OPTIONS 等 AllowedHeaders 允许的请求头,如 Content-Type, Authorization AllowCredentials 是否允许携带 cookie
- 浏览器在发出跨域请求之前,通常会发出一个 OPTIONS 请求(预检)。务必确保你的路由器或中间件没有拦截 OPTIONS 请求。 示例: router.Methods(“OPTIONS”).HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) }) 不过大多数时候 rs/cors 会自动处理 OPTIONS 请求,你无需手动添加。
- 开发阶段可以设置 AllowedOrigins: []string{"*"},但生产环境下应限制为指定域名。 确保中间件被正确包裹 router,否则它根本不会生效。 如果你还有认证逻辑,确保 cors 中间件放在最外层。
- 在 Golang 项目中正确配置 CORS 是 API 可用性的基本要求之一。通过 gorilla/mux 搭配 rs/cors,你可以快速实现跨域支持。记住,最常见的错误就是:创建了中间件但没有包裹 router。只要绕开这个坑,你的跨域请求将顺利进行。 原文链接:https://duoke360.com/post/44220 到此这篇关于如何让 Golang 中的 Gorilla CORS 中间件正确用法的文章就介绍到这了,更多相关go gorilla cors 中间件用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客! 您可能感兴趣的文章: go语言使用gorilla/websocket实现websocket golang开发 gorilla websocket的使用示例详解 Go gorilla/sessions库安装使用 Go gorilla securecookie库的安装使用详解 golang常用库之gorilla/mux-http路由库使用详解 Go 跨域中间件解决CORS问题 使用go语言实现cors中间件
目录
- 如何让 Golang 中的 Gorilla CORS 中间件正确工作
- 一、基础依赖
- 二、错误用法(很多人一开始都会这样写)
- 三、正确用法
- 四、如何验证是否生效
- 五、常见配置项说明
- 六、OPTIONS 请求的问题
- 七、小贴士
- 总结
在构建 RESTful API 时,**跨域资源共享(CORS)**是一个常见问题。前端请求后端接口时,若两者的域名、端口不同,浏览器就会触发跨域校验。若服务端未配置 CORS 策略,则浏览器会阻止请求。
Golang 中使用 gorilla/mux 路由器配合 rs/cors 中间件库可以优雅地解决这个问题。然而,很多人刚开始使用时会遇到配置不生效的问题,本文将详细介绍其正确用法。
确保安装以下依赖:
go get -u github.com/gorilla/mux go get -u github.com/rs/cors
package main
import (
"fmt"
"net/http"
"github.com/gorilla/mux"
"github.com/rs/cors"
)
func main() {
router := mux.NewRouter()
router.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, CORS!")
}).Methods("GET")
// ❌ 错误:中间件未被真正使用
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
})
http.ListenAndServe(":8080", router) // 忽略了 cors.Handler
}
虽然写了 cors.New(...),但实际上并没有将其作用于 HTTP 服务器上。这相当于创建了一个 CORS 配置但未使用。
你需要将 cors.Handler 包装你的主路由器:
func main() {
router := mux.NewRouter()
router.HandleFunc("/api", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintln(w, "Hello, CORS!")
}).Methods("GET")
// ✅ 正确:将 CORS 中间件包裹 router
c := cors.New(cors.Options{
AllowedOrigins: []string{"*"},
AllowedMethods: []string{"GET", "POST", "PUT", "DELETE"},
AllowedHeaders: []string{"Content-Type"},
AllowCredentials: true,
})
handler := c.Handler(router)
http.ListenAndServe(":8080", handler)
}
你可以通过以下方式测试:
- 用浏览器或 Postman 发起请求。
- 检查返回的响应头中是否有:
Access-Control-Allow-Origin: *
这说明服务端已允许跨域请求。
| 配置项 | 说明 |
|---|---|
AllowedOrigins |
允许的来源,例如:[]string{"http://localhost:3000"} 或 * 表示所有 |
AllowedMethods |
支持的方法,如 GET, POST, OPTIONS 等 |
AllowedHeaders |
允许的请求头,如 Content-Type, Authorization |
AllowCredentials |
是否允许携带 cookie |
浏览器在发出跨域请求之前,通常会发出一个 OPTIONS 请求(预检)。务必确保你的路由器或中间件没有拦截 OPTIONS 请求。
示例:
router.Methods("OPTIONS").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})
不过大多数时候 rs/cors 会自动处理 OPTIONS 请求,你无需手动添加。
- 开发阶段可以设置
AllowedOrigins: []string{"*"},但生产环境下应限制为指定域名。
- 确保中间件被正确包裹
router,否则它根本不会生效。
- 如果你还有认证逻辑,确保
cors 中间件放在最外层。
AllowedOrigins: []string{"*"},但生产环境下应限制为指定域名。router,否则它根本不会生效。cors 中间件放在最外层。
在 Golang 项目中正确配置 CORS 是 API 可用性的基本要求之一。通过 gorilla/mux 搭配 rs/cors,你可以快速实现跨域支持。记住,最常见的错误就是:创建了中间件但没有包裹 router。只要绕开这个坑,你的跨域请求将顺利进行。
原文链接:https://duoke360.com/post/44220
到此这篇关于如何让 Golang 中的 Gorilla CORS 中间件正确用法的文章就介绍到这了,更多相关go gorilla cors 中间件用法内容请搜索风君子博客以前的文章或继续浏览下面的相关文章希望大家以后多多支持风君子博客!
您可能感兴趣的文章:
- go语言使用gorilla/websocket实现websocket
- golang开发 gorilla websocket的使用示例详解
- Go gorilla/sessions库安装使用
- Go gorilla securecookie库的安装使用详解
- golang常用库之gorilla/mux-http路由库使用详解
- Go 跨域中间件解决CORS问题
- 使用go语言实现cors中间件