最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go?跨域中間件解決CORS問題

 更新時間:2025年04月22日 10:47:50   作者:程序員愛釣魚  
跨域問題CORS是前端開發(fā)人員經(jīng)常遇到的問題,本文主要介紹了Go?跨域中間件解決CORS問題,具有一定的參考價值,感興趣的可以了解一下

在開發(fā)基于 Web 的 API 時,尤其是前后端分離項(xiàng)目,**跨域問題(CORS)**是前端開發(fā)人員經(jīng)常遇到的“攔路虎”。本文將帶你了解什么是跨域、如何在 Go 中優(yōu)雅地實(shí)現(xiàn)一個跨域中間件,支持你自己的 HTTP 服務(wù)或框架如 net/http、Gin 等。

什么是跨域(CORS)?

CORS(Cross-Origin Resource Sharing)是瀏覽器的一種安全策略,它阻止一個域上的網(wǎng)頁向另一個域發(fā)起 AJAX 請求。比如,前端運(yùn)行在 http://localhost:3000,后端運(yùn)行在 http://localhost:8080,這就屬于跨源請求。

為了安全,瀏覽器默認(rèn)禁止這種請求,除非后端服務(wù)器明確在響應(yīng)頭中聲明:我允許這個請求通過

Go 中如何處理跨域?

在 Go 中,我們可以通過**中間件(middleware)**的方式攔截請求,并給響應(yīng)頭添加相關(guān)的 CORS 允許字段,從而讓瀏覽器放心通信。

一、原生 net/http 實(shí)現(xiàn) CORS 中間件

package main

import (
    "fmt"
    "net/http"
)

func main() {
    http.Handle("/", corsMiddleware(http.HandlerFunc(indexHandler)))
    http.ListenAndServe(":8080", nil)
}

func indexHandler(w http.ResponseWriter, r *http.Request) {
    fmt.Fprintln(w, "Hello from Go Backend")
}

func corsMiddleware(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        // 設(shè)置 CORS 響應(yīng)頭
        w.Header().Set("Access-Control-Allow-Origin", "*") // 允許所有來源
        w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS")
        w.Header().Set("Access-Control-Allow-Headers", "Content-Type, Authorization")

        // 如果是預(yù)檢請求,直接返回
        if r.Method == "OPTIONS" {
            w.WriteHeader(http.StatusNoContent)
            return
        }

        // 繼續(xù)處理請求
        next.ServeHTTP(w, r)
    })
}

支持基本的 GET、POST 請求,并處理了瀏覽器的 預(yù)檢請求(OPTIONS)。

二、使用 Gin 框架的 CORS 中間件

如果你使用的是 Gin 框架,可以使用官方推薦的 github.com/gin-contrib/cors 插件:

安裝依賴:

go get github.com/gin-contrib/cors

示例代碼:

package main

import (
    "github.com/gin-contrib/cors"
    "github.com/gin-gonic/gin"
    "time"
)

func main() {
    r := gin.Default()

    // 使用 cors 中間件
    r.Use(cors.New(cors.Config{
        AllowOrigins:     []string{"http://localhost:3000"}, // 只允許特定域名
        AllowMethods:     []string{"GET", "POST", "PUT", "DELETE", "OPTIONS"},
        AllowHeaders:     []string{"Origin", "Content-Type", "Authorization"},
        ExposeHeaders:    []string{"Content-Length"},
        AllowCredentials: true,
        MaxAge:           12 * time.Hour,
    }))

    r.GET("/", func(c *gin.Context) {
        c.JSON(200, gin.H{"message": "Hello from Gin!"})
    })

    r.Run(":8080")
}

更靈活配置,可以設(shè)置特定來源、暴露字段、是否攜帶 cookie 等。

小結(jié)

方式特點(diǎn)
原生 net/http靈活輕便,但需要手動設(shè)置和維護(hù)響應(yīng)頭
使用 Gin 插件配置方便,支持更多高級選項(xiàng),如 credentials、緩存等

跨域處理注意事項(xiàng)

  • 開發(fā)環(huán)境可以設(shè)置 * 允許所有源,但生產(chǎn)環(huán)境請限制具體域名,避免安全風(fēng)險。
  • 前端使用 fetch 時,若要攜帶 Cookie,需要設(shè)置 credentials: 'include',后端也要設(shè)置 AllowCredentials: true。
  • OPTIONS 請求是瀏覽器自動發(fā)送的預(yù)檢請求,必須返回 200 或 204 狀態(tài)碼。

寫在最后

在 Go 項(xiàng)目中實(shí)現(xiàn) CORS 支持并不復(fù)雜,只要你理解了瀏覽器的跨域行為,就可以通過中間件輕松搞定。無論你是用標(biāo)準(zhǔn)庫還是 Gin 框架,跨域問題都不再是“魔咒”。

到此這篇關(guān)于Go 跨域中間件解決CORS問題的文章就介紹到這了,更多相關(guān)Go 跨域中間件 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang 如何判斷數(shù)組某個元素是否存在 (isset)

    Golang 如何判斷數(shù)組某個元素是否存在 (isset)

    這篇文章主要介紹了Golang 如何判斷數(shù)組某個元素是否存在 (isset),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • 如何避免Go語言常見錯誤之意外的變量隱藏

    如何避免Go語言常見錯誤之意外的變量隱藏

    在Go語言中,變量隱藏(Variable Shadowing)是一個常見的錯誤來源,變量隱藏發(fā)生在一個內(nèi)部作用域中聲明的變量與外部作用域的變量同名時,這可能導(dǎo)致開發(fā)者無意中使用了錯誤的變量,造成難以追蹤的bug,本文講解一些關(guān)于變量隱藏的常見錯誤和如何避免它們的方法
    2024-01-01
  • 在Go中編寫測試代碼的方法總結(jié)

    在Go中編寫測試代碼的方法總結(jié)

    在程序開發(fā)過程中,測試是非常重要的一環(huán),甚至有一種開發(fā)模式叫?TDD,先編寫測試,再編寫功能代碼,通過測試來推動整個開發(fā)的進(jìn)行,可見測試在開發(fā)中的重要程度,為此,Go提供了testing框架來方便我們編寫測試,本文將向大家介紹在Go中如何編寫測試代碼
    2023-07-07
  • 詳細(xì)介紹Go語言之?dāng)?shù)組與切片

    詳細(xì)介紹Go語言之?dāng)?shù)組與切片

    這篇文章介紹Go語言之?dāng)?shù)組與切片,數(shù)組是具有相同唯一類型的一組已編號且長度固定的數(shù)據(jù)項(xiàng)序列,這種類型可是任意的原始類型如整形、字符串或自定義類型。切片是數(shù)組的一個引用,因此切片是引用類型,在進(jìn)行傳遞時,遵守引用傳遞的機(jī)制,下面我們就來詳細(xì)了解一下該內(nèi)容
    2021-10-10
  • Golang HTTP請求Json響應(yīng)解析方法以及解讀失敗的原因

    Golang HTTP請求Json響應(yīng)解析方法以及解讀失敗的原因

    這篇文章主要介紹了Golang HTTP請求Json響應(yīng)解析方法以及解讀失敗的原因,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • 一文帶你吃透Golang中的類型轉(zhuǎn)換

    一文帶你吃透Golang中的類型轉(zhuǎn)換

    Golang是一種強(qiáng)類型語言,所以Golang的類型轉(zhuǎn)換和C/C++ java等語言的類型轉(zhuǎn)換還有點(diǎn)區(qū)別,本文講通過一些簡單的示例帶大家深入了解一下Golang中的類型轉(zhuǎn)換,需要的可以參考下
    2023-05-05
  • 基于Go語言實(shí)現(xiàn)文件上傳服務(wù)的示例代碼

    基于Go語言實(shí)現(xiàn)文件上傳服務(wù)的示例代碼

    在 Web 開發(fā)中,文件上傳 是常見需求,例如頭像上傳、文檔存儲、圖片分享等功能,Go 語言的標(biāo)準(zhǔn)庫 net/http 已經(jīng)內(nèi)置了對 multipart/form-data 類型的支持,能讓我們輕松構(gòu)建一個文件上傳服務(wù),本文將帶你實(shí)現(xiàn)一個可運(yùn)行的文件上傳接口,需要的朋友可以參考下
    2025-08-08
  • 利用Go語言實(shí)現(xiàn)二叉搜索樹

    利用Go語言實(shí)現(xiàn)二叉搜索樹

    二叉樹是一種常見并且非常重要的數(shù)據(jù)結(jié)構(gòu),在很多項(xiàng)目中都能看到二叉樹的身影,當(dāng)然它也有很多變種,本文要介紹的是二叉搜索樹的實(shí)現(xiàn),希望對大家有所幫助
    2023-07-07
  • 一文帶你了解Go語言中的單元測試

    一文帶你了解Go語言中的單元測試

    寫過單元測試的開發(fā)人員應(yīng)該理解,單元測試最核心的價值是為了證明:為什么我寫的代碼是正確的?也就是從邏輯角度幫你檢查你的代碼。本文就來和大家詳細(xì)聊聊Go語言中的單元測試,需要的可以參考一下
    2022-07-07
  • 一文帶你熟悉Go語言中的分支結(jié)構(gòu)

    一文帶你熟悉Go語言中的分支結(jié)構(gòu)

    這篇文章主要和大家分享一下Go語言中的分支結(jié)構(gòu)(if?-?else-if?-?else、switch),文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)Go語言有一定的幫助,需要的可以參考一下
    2022-11-11

最新評論

阿图什市| 礼泉县| 仁寿县| 高青县| 钟山县| 绥芬河市| 秭归县| 龙海市| 永济市| 新野县| 孝昌县| 绥芬河市| 寻乌县| 辽宁省| 扎赉特旗| 大荔县| 天台县| 陇川县| 星座| 马公市| 五大连池市| 黄平县| 庆阳市| 庆阳市| 上犹县| 麻江县| 北辰区| 伽师县| 唐海县| 通许县| 那曲县| 襄樊市| 锡林郭勒盟| 大渡口区| 枣强县| 江油市| 尤溪县| 庄河市| 都江堰市| 太仓市| 寿光市|