亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

全面解析Golang 中的 Gorilla CORS 中間件正確用法

 更新時(shí)間:2025年07月30日 11:40:19   作者:gopher.guo  
Golang 中使用 gorilla/mux 路由器配合 rs/cors 中間件庫(kù)可以優(yōu)雅地解決這個(gè)問(wèn)題,然而,很多人剛開始使用時(shí)會(huì)遇到配置不生效的問(wèn)題,本文將詳細(xì)介紹其正確用法,感興趣的朋友一起看看吧

如何讓 Golang 中的 Gorilla CORS 中間件正確工作

在構(gòu)建 RESTful API 時(shí),**跨域資源共享(CORS)**是一個(gè)常見問(wèn)題。前端請(qǐng)求后端接口時(shí),若兩者的域名、端口不同,瀏覽器就會(huì)觸發(fā)跨域校驗(yàn)。若服務(wù)端未配置 CORS 策略,則瀏覽器會(huì)阻止請(qǐng)求。

Golang 中使用 gorilla/mux 路由器配合 rs/cors 中間件庫(kù)可以優(yōu)雅地解決這個(gè)問(wèn)題。然而,很多人剛開始使用時(shí)會(huì)遇到配置不生效的問(wèn)題,本文將詳細(xì)介紹其正確用法。

一、基礎(chǔ)依賴

確保安裝以下依賴:

go get -u github.com/gorilla/mux
go get -u github.com/rs/cors

二、錯(cuò)誤用法(很多人一開始都會(huì)這樣寫)

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")
	// ? 錯(cuò)誤:中間件未被真正使用
	c := cors.New(cors.Options{
		AllowedOrigins: []string{"*"},
	})
	http.ListenAndServe(":8080", router) // 忽略了 cors.Handler
}

雖然寫了 cors.New(...),但實(shí)際上并沒有將其作用于 HTTP 服務(wù)器上。這相當(dāng)于創(chuàng)建了一個(gè) 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)
}

四、如何驗(yàn)證是否生效

你可以通過(guò)以下方式測(cè)試:

  1. 用瀏覽器或 Postman 發(fā)起請(qǐng)求。
  2. 檢查返回的響應(yīng)頭中是否有:
Access-Control-Allow-Origin: *

這說(shuō)明服務(wù)端已允許跨域請(qǐng)求。

五、常見配置項(xiàng)說(shuō)明

配置項(xiàng)說(shuō)明
AllowedOrigins允許的來(lái)源,例如:[]string{"http://localhost:3000"}* 表示所有
AllowedMethods支持的方法,如 GET, POST, OPTIONS
AllowedHeaders允許的請(qǐng)求頭,如 Content-Type, Authorization
AllowCredentials是否允許攜帶 cookie

六、OPTIONS 請(qǐng)求的問(wèn)題

瀏覽器在發(fā)出跨域請(qǐng)求之前,通常會(huì)發(fā)出一個(gè) OPTIONS 請(qǐng)求(預(yù)檢)。務(wù)必確保你的路由器或中間件沒有攔截 OPTIONS 請(qǐng)求。

示例:

router.Methods("OPTIONS").HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
	w.WriteHeader(http.StatusOK)
})

不過(guò)大多數(shù)時(shí)候 rs/cors 會(huì)自動(dòng)處理 OPTIONS 請(qǐng)求,你無(wú)需手動(dòng)添加。

七、小貼士

  • 開發(fā)階段可以設(shè)置 AllowedOrigins: []string{"*"},但生產(chǎn)環(huán)境下應(yīng)限制為指定域名。
  • 確保中間件被正確包裹 router,否則它根本不會(huì)生效。
  • 如果你還有認(rèn)證邏輯,確保 cors 中間件放在最外層。

總結(jié)

在 Golang 項(xiàng)目中正確配置 CORS 是 API 可用性的基本要求之一。通過(guò) gorilla/mux 搭配 rs/cors,你可以快速實(shí)現(xiàn)跨域支持。記住,最常見的錯(cuò)誤就是:創(chuàng)建了中間件但沒有包裹 router。只要繞開這個(gè)坑,你的跨域請(qǐng)求將順利進(jìn)行。

原文鏈接:https://duoke360.com/post/44220

到此這篇關(guān)于如何讓 Golang 中的 Gorilla CORS 中間件正確用法的文章就介紹到這了,更多相關(guān)go gorilla cors 中間件用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中Map按照Value大小排序的方法實(shí)例

    Golang中Map按照Value大小排序的方法實(shí)例

    這篇文章主要給大家介紹了關(guān)于Golang中Map按照Value大小排序的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-03-03
  • Golang設(shè)計(jì)模式之組合模式講解

    Golang設(shè)計(jì)模式之組合模式講解

    這篇文章主要介紹了Golang設(shè)計(jì)模式之組合模式,組合模式針對(duì)于特定場(chǎng)景,如文件管理、組織管理等,使用該模式能簡(jiǎn)化管理,使代碼變得非常簡(jiǎn)潔
    2023-01-01
  • Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟

    本文主要介紹了Golang實(shí)現(xiàn)支付寶沙箱支付的方法步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • 利用golang和shell計(jì)算一個(gè)字符串的md5值

    利用golang和shell計(jì)算一個(gè)字符串的md5值

    這篇文章主要介紹了如何利用golang和shell計(jì)算一個(gè)字符串的md5值,我們先用shell來(lái)計(jì)算一下,再去判斷golang計(jì)算的md5值是否正確,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下
    2024-03-03
  • Go 阻塞的實(shí)現(xiàn)示例

    Go 阻塞的實(shí)現(xiàn)示例

    Go語(yǔ)言提供了多種同步和通信機(jī)制,可以用于實(shí)現(xiàn)阻塞的效果,本文主要介紹了Go 阻塞的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-05-05
  • Go語(yǔ)言開發(fā)前后端不分離項(xiàng)目詳解

    Go語(yǔ)言開發(fā)前后端不分離項(xiàng)目詳解

    這篇文章主要為大家介紹了Go語(yǔ)言開發(fā)前后端不分離項(xiàng)目詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • go語(yǔ)言的sql包原理與用法分析

    go語(yǔ)言的sql包原理與用法分析

    這篇文章主要介紹了go語(yǔ)言的sql包原理與用法,較為詳細(xì)的分析了Go語(yǔ)言里sql包的結(jié)構(gòu)、相關(guān)函數(shù)與使用方法,需要的朋友可以參考下
    2016-07-07
  • Golang共享變量如何解決問(wèn)題

    Golang共享變量如何解決問(wèn)題

    協(xié)程之間的通信只能夠通過(guò)通道。但是我們習(xí)慣于共享變量,而且很多時(shí)候使用共享變量能讓代碼更簡(jiǎn)潔。那么Golang共享變量如何解決問(wèn)題,感興趣的可以了解一下
    2021-12-12
  • 詳解Go語(yǔ)言中的數(shù)據(jù)庫(kù)操作

    詳解Go語(yǔ)言中的數(shù)據(jù)庫(kù)操作

    數(shù)據(jù)庫(kù)是應(yīng)用開發(fā)中必須要掌握的技巧。這篇文章主要和大家介紹一下Go語(yǔ)言中相關(guān)的數(shù)據(jù)庫(kù)操作,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下
    2023-02-02
  • 一文帶你了解Golang中強(qiáng)大的重試機(jī)制

    一文帶你了解Golang中強(qiáng)大的重試機(jī)制

    在 Go 語(yǔ)言中,處理瞬態(tài)錯(cuò)誤是常見的挑戰(zhàn),這些錯(cuò)誤可能會(huì)在一段時(shí)間后自動(dòng)恢復(fù),因此,重試機(jī)制在這些情況下非常重要,所以本文就來(lái)和大家聊聊Golang中強(qiáng)大的重試機(jī)制吧
    2025-01-01

最新評(píng)論