全面解析Golang 中的 Gorilla CORS 中間件正確用法
如何讓 Golang 中的 Gorilla CORS 中間件正確工作
在構建 RESTful API 時,**跨域資源共享(CORS)**是一個常見問題。前端請求后端接口時,若兩者的域名、端口不同,瀏覽器就會觸發(fā)跨域校驗。若服務端未配置 CORS 策略,則瀏覽器會阻止請求。
Golang 中使用 gorilla/mux 路由器配合 rs/cors 中間件庫可以優(yōu)雅地解決這個問題。然而,很多人剛開始使用時會遇到配置不生效的問題,本文將詳細介紹其正確用法。
一、基礎依賴
確保安裝以下依賴:
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 服務器上。這相當于創(chuàng)建了一個 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 發(fā)起請求。
- 檢查返回的響應頭中是否有:
Access-Control-Allow-Origin: *
這說明服務端已允許跨域請求。
五、常見配置項說明
| 配置項 | 說明 |
|---|---|
AllowedOrigins | 允許的來源,例如:[]string{"http://localhost:3000"} 或 * 表示所有 |
AllowedMethods | 支持的方法,如 GET, POST, OPTIONS 等 |
AllowedHeaders | 允許的請求頭,如 Content-Type, Authorization |
AllowCredentials | 是否允許攜帶 cookie |
六、OPTIONS 請求的問題
瀏覽器在發(fā)出跨域請求之前,通常會發(fā)出一個 OPTIONS 請求(預檢)。務必確保你的路由器或中間件沒有攔截 OPTIONS 請求。
示例:
router.Methods("OPTIONS").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
w.WriteHeader(http.StatusOK)
})不過大多數(shù)時候 rs/cors 會自動處理 OPTIONS 請求,你無需手動添加。
七、小貼士
- 開發(fā)階段可以設置
AllowedOrigins: []string{"*"},但生產(chǎn)環(huán)境下應限制為指定域名。 - 確保中間件被正確包裹
router,否則它根本不會生效。 - 如果你還有認證邏輯,確保
cors中間件放在最外層。
總結
在 Golang 項目中正確配置 CORS 是 API 可用性的基本要求之一。通過 gorilla/mux 搭配 rs/cors,你可以快速實現(xiàn)跨域支持。記住,最常見的錯誤就是:創(chuàng)建了中間件但沒有包裹 router。只要繞開這個坑,你的跨域請求將順利進行。
原文鏈接:https://duoke360.com/post/44220
到此這篇關于如何讓 Golang 中的 Gorilla CORS 中間件正確用法的文章就介紹到這了,更多相關go gorilla cors 中間件用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

