允许接口跨域往往是需要结合 路由管理-中间件/拦截器 一起使用,来统一设置某些路由规则下的接口可以跨域访问。同时,针对允许 WebSocket
的跨域请求访问,也是通过该方式来实现。
相关方法: https://pkg.go.dev/github.com/gogf/gf/v2/net/ghttp#Response
func (r *Response) CORS(options CORSOptions)
func (r *Response) CORSAllowedOrigin(options CORSOptions) bool
func (r *Response) CORSDefault()
func (r *Response) DefaultCORSOptions() CORSOptions
CORS
对象
CORS
是 W3
互联网标准组织对HTTP跨域请求的标准,在 ghttp
模块中,我们可以通过 CORSOptions
对象来管理对应的跨域请求选项。定义如下:
// See https://www.w3.org/TR/cors/ .
// 服务端允许跨域请求选项
type CORSOptions struct {
AllowDomain []string // Used for allowing requests from custom domains
AllowOrigin string // Access-Control-Allow-Origin
AllowCredentials string // Access-Control-Allow-Credentials
ExposeHeaders string // Access-Control-Expose-Headers
MaxAge int // Access-Control-Max-Age
AllowMethods string // Access-Control-Allow-Methods
AllowHeaders string // Access-Control-Allow-Headers
}
具体参数的介绍请查看W3组织 官网手册。
CORS
配置
默认 CORSOptions
当然,为方便跨域设置,在 ghttp
模块中也提供了默认的跨域请求选项,通过 DefaultCORSOptions
方法获取。大多数情况下,我们在需要允许跨域请求的接口中(一般情况下使用中间件)可以直接使用 CORSDefault()
允许该接口跨域访问。
限制 Origin
来源
大多数时候,我们需要限制请求来源为我们受信任的域名列表,我们可以使用 AllowDomain
配置,使用方式:
// 允许跨域请求中间件
func Middleware(r *ghttp.Request) {
corsOptions := r.Response.DefaultCORSOptions()
corsOptions.AllowDomain = []string{"goframe.org", "johng.cn"}
r.Response.CORS(corsOptions)
r.Middleware.Next()
}