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