Go 框架 Gin 怎么實現(xiàn)允許前端跨域請求?
1、介紹
在前后端分離的項目中,前端在請求服務(wù)端提供的接口時,往往會遇到跨域請求的問題,服務(wù)端可以通過 CORS 的方式解決,限于篇幅,關(guān)于跨域和 CORS 的詳細介紹,讀者朋友們可以自行查閱相關(guān)資料。
Go 框架 Gin 官方提供了 CORS 中間件,可以很方便地實現(xiàn)使用 CORS 解決跨域問題,本文我們介紹該 Gin 中間件的使用方式。
2、使用方式
在介紹 Gin 中間件 CORS 的使用方式之前,我們需要先使用命令安裝該中間件,go get github.com/gin-contrib/cors。
在 Go 框架 Gin 中使用 CORS 中間件非常簡單,只需使用 Use 方法,將中間件綁定到路由中。
CORS 中間件提供三個函數(shù),代表三種使用方式,分別是 New、DefaultConfig 和 Default。
New 方式
其中 New 函數(shù),可以接收 CORS 中間件的配置項,可通過自定義配置項,滿足任意需要跨域的場景。
示例代碼:
閱讀上面這段代碼,使用 New 函數(shù)接收配置項,返回一個用戶自定義的 CORS 中間件,綁定到路由中。
CORS 中間件的配置項說明:
- AllowAllOrigins bool 允許所有請求源。
- AllowOrigins []string? 指定允許請求源的列表,如果列表中存在 *?,則允許所有請求源,默認值是 []。
- AllowOriginFunc func(origin string) bool? 接收參數(shù) origin?,函數(shù)體中的驗證邏輯返回是否允許跨域請求。該配置項優(yōu)先級高于 AllowOrigins []string?,如果設(shè)置該配置項,AllowOrigins []string 配置項的設(shè)置被忽略。
- AllowMethods []string? 允許的請求方式,默認值是 GET,POST,PUT,PATCH,DELETE,HEAD?,和 OPTIONS。
- AllowHeaders []string 用在對預(yù)請求的響應(yīng)中,指示實際的請求中可以使用哪些 HTTP 請求頭。
- AllowCredentials bool? 表示請求附帶請求憑據(jù)時是否響應(yīng)請求,例如 cookie、HTTP authentication 或客戶端 SSL 證書。
- ExposeHeaders []string 可以在響應(yīng)中顯示的請求頭。
- MaxAge time.Duration 指示預(yù)請求的結(jié)果能被緩存多久。
- AllowWildcard bool? 添加請求源是否允許使用通配符,例如 http://some-domain/*,https://api.? 或 http://some.*.subdomain.com。
- AllowBrowserExtensions bool 允許使用常用的瀏覽器的擴展模式。
- AllowWebSockets bool 允許使用 WebSocket 協(xié)議。
- AllowFiles bool? 允許使用 file:// 協(xié)議。
DefaultConfig 方式
DefaultConfig 方式就是默認設(shè)置一些通用配置項,我們可以直接使用,也可以在此基礎(chǔ)上添加我們需要的其他配置項。
閱讀上面這段代碼,我們可以發(fā)現(xiàn) DefaultConfig 方式,默認設(shè)置了允許的請求方式、允許的請求頭、附帶請求憑據(jù)時是否響應(yīng)請求和預(yù)請求結(jié)果的緩存時間。
Default 方式
Default 方式就是在 DefaultConfig 方式的基礎(chǔ)上,設(shè)置 AllowAllOrigins 選項為 true,因為 DefaultConfig 方式默認不允許任意請求源,所以需要單獨設(shè)置 AllowAllOrigins 選項為 true。
3、總結(jié)
本文我們介紹了 Go 語言框架 Gin 的中間件 CORS,該中間件提供了三種使用方式,我們可以按照實際開發(fā)需求選擇合適的使用方式。
感興趣的讀者朋友們可以閱讀該中間件的源碼,重點熟悉每個配置項的作用。