Go Gin 允許跨域訪問
上週五的時候,給介面新增了支援跨域訪問,所有做一下跨域方面的筆記。
HTTP 訪問控制 (CORS)
當一個資源從與該資源本身所在的伺服器不同的域或埠請求一個資源時,資源會發起一個跨域 HTTP 請求。
出於安全原因,瀏覽器限制從指令碼內發起的跨域 HTTP 請求。例如,XMLHttpRequest 和 Fetch API 遵循同源策略。這意味著使用這些 API 的 Web 應用程式只能從載入應用程式的同一個域請求 HTTP 資源,除非使用 CORS 標頭檔案。
跨域資源共享標準:規範要求,對那些可能對伺服器資料產生副作用的 HTTP 請求方法(特別是 GET 以外的 HTTP 請求,或者搭配某些 MIME 型別的 POST 請求),瀏覽器必須首先使用 OPTIONS
方法發起一個預檢請求(preflight request),從而獲知服務端是否允許該跨域請求。伺服器確認允許之後,才發起實際的 HTTP 請求。在預檢請求的返回中,伺服器端也可以通知客戶端,是否需要攜帶身份憑證(包括 Cookies 和 HTTP 認證相關資料)。
ps. 上面是 MDN 的文件介紹。
Gin 新增跨域中介軟體
Gin 是一個 Go 開發的 Web 框架,給 Gin 加 CORS 的支援也是非常簡單的。
CORS 中介軟體外掛
這是 Gin 官方的 CORS 中介軟體 https://github.com/gin-contrib/cors
使用 CORS
引入包
import "github.com/gin-contrib/cors"
允許所有源的配置
func main() {
router := gin.Default()
// same as
// config := cors.DefaultConfig()
// config.AllowAllOrigins = true
// router.Use(cors.New(config))
router.Use(cors.Default())
router.Run()
}
自定義源的配置
config := cors.DefaultConfig()
config.AllowOrigins = []string{"http://google.com"}
config.AddAllowOrigins("http://facebook.com")
自定義其他配置:
cors.Config{
AllowOrigins: []string{"https://foo.com"},
AllowMethods: []string{"PUT", "PATCH"},
AllowHeaders: []string{"Origin"},
ExposeHeaders: []string{"Content-Length"},
AllowCredentials: true,
AllowOriginFunc: func(origin string) bool {
return origin == "https://github.com"
},
MaxAge: 12 * time.Hour,
}
主要的幾個配置介紹:
- AllowOrigins 允許源列表
- AllowAllOrigins 允許所有源,返回的格式
Access-Control-Allow-Origin: *
- AllowMethods 允許的方法列表
- AllowHeaders 允許的頭部資訊
- AllowCredentials 允許暴露請求的響應,
Access-Control-Allow-Credentials: true
資源
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Access_control_CORS
https://developer.mozilla.org/en-US/docs/Web/HTTP/Server-Side_Access_Control
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Access-Control-Allow-Credentials
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Authentication
https://github.com/gin-contrib/cors
- 加微信實戰群請加微信(註明:實戰群):gocnio
相關文章
- Laravel API 允許跨域訪問LaravelAPI跨域
- springboot配置CORS允許跨域訪問Spring BootCORS跨域
- PHP 設定多域名允許跨域訪問PHP跨域
- 允許跨域請求跨域
- SpringBoot 允許跨域配置Spring Boot跨域
- 如何使flask允許跨域請求Flask跨域
- 關於go的跨域處理 ginGo跨域
- 啟動google 瀏覽器允許跨域Go瀏覽器跨域
- mysql如何允許遠端訪問MySql
- localStorage 跨域訪問跨域
- MYSQL設定允許所有IP訪問MySql
- mariadb配置允許遠端訪問方式
- 跨源通訊、跨域訪問跨域
- 允許區域網內其他主機訪問本地MySql資料庫MySql資料庫
- iframe 元素跨域訪問跨域
- 同源策略和跨域訪問跨域
- 跨域共享CORS詳解及Gin配置跨域跨域CORS
- Linux 防火牆只允許指定IP 埠訪問Linux防火牆
- wamp基本用法,允許他人訪問,修改根目錄
- 怎樣設定才能允許外網訪問MySQLMySql
- 解決JS跨域訪問的問題JS跨域
- vue_cli3.x 跨域訪問Vue跨域
- spring boot解決跨域訪問配置Spring Boot跨域
- 防止跨域問題無法訪問網址跨域
- 阿里雲圖片跨域訪問設定阿里跨域
- 設定Mysql5.6允許外網訪問詳細流程MySql
- Nginx解決前端訪問資源跨域問題Nginx前端跨域
- Angular應用解決跨域訪問的問題Angular跨域
- 跨域問題(普通跨域和springsecurity跨域)跨域SpringGse
- 解決Django本地介面不能跨域訪問的問題Django跨域
- 跨域訪問是什麼!怎麼解決?跨域
- JavaScript 跨域訪問(API介面)實現原理分析JavaScript跨域API
- wampserver搭建站點 允許訪問通過防火牆的設定方法Server防火牆
- 跨域問題跨域
- 分享跨域訪問的解決方案與基礎分析跨域
- 搞懂:前端跨域問題JS解決跨域問題VUE代理解決跨域問題原理前端跨域JSVue
- Kubernetes爆發嚴重Bug允許任何使用者訪問管理控制元件控制元件
- 【Gin-API系列】Gin中介軟體之鑑權訪問(五)API
- 詳解瀏覽器跨域訪問的幾種辦法瀏覽器跨域