介绍
在前后端分离的项目中,前端在请求服务端提供的接口时,往往会遇到跨域请求的问题,服务端可以通过 CORS 的方式解决,限于篇幅,关于跨域和 CORS 的详细介绍,读者朋友们可以自行查阅相关资料。
Go 框架 Gin 官方提供了 CORS 中间件,可以很方便地实现使用 CORS 解决跨域问题,本文我们介绍该 Gin 中间件的使用方式。
使用方式
在介绍 Gin 中间件 CORS 的使用方式之前,我们需要先使用命令安装该中间件,go get github.com/gin-contrib/cors
。
在 Go 框架 Gin 中使用 CORS 中间件非常简单,只需使用 Use
方法,将中间件绑定到路由中。
CORS 中间件提供三个函数,代表三种使用方式,分别是 New
、DefaultConfig
和 Default
。
其中 New
函数,可以接收 CORS 中间件的配置项,可通过自定义配置项,满足任意需要跨域的场景。
示例代码:
... router.Use(cors.New(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, })) ...
阅读上面这段代码,使用 New
函数接收配置项,返回一个用户自定义的 CORS 中间件,绑定到路由中。
CORS 中间件的配置项说明:
AllowAllOrigins bool
允许所有请求源。AllowOrigins []string
指定允许请求源的列表,如果列表中存在*
,则允许所有请求源,默认值是[]
。AllowOriginFunc func(origin string) bool
接收参数origin
,函数体中的验证逻辑返回是否允许跨域请求。该配置项优先级高于AllowOrigins []string
,如果设置该配置项,AllowOrigins []string
配置项的设置被忽略。AllowMethods []string
允许的请求方式,默认值是GET
,POST
,PUT
,PATCH
,DELETE
,HEAD
,和OPTIONS
。AllowHeaders []string
用在对预请求的响应中,指示实际的请求中可以使用哪些 HTTP 请求头。AllowCredentials bool
表示请求附带请求凭据时是否响应请求,例如cookie
、HTTP authentication
或客户端 SSL 证书。ExposeHeaders []string
可以在响应中显示的请求头。MaxAge time.Duration
指示预请求的结果能被缓存多久。AllowWildcard bool
添加请求源是否允许使用通配符,例如http://some-domain/*
,https://api.
或http://some.*.subdomain.com
。AllowBrowserExtensions bool
允许使用常用的浏览器的扩展模式。AllowWebSockets bool
允许使用 WebSocket 协议。AllowFiles bool
允许使用file://
协议。
DefaultConfig
方式
DefaultConfig
方式就是默认设置一些通用配置项,我们可以直接使用,也可以在此基础上添加我们需要的其他配置项。
func DefaultConfig() Config { return Config{ AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"}, AllowHeaders: []string{"Origin", "Content-Length", "Content-Type"}, AllowCredentials: false, MaxAge: 12 * time.Hour, } }
阅读上面这段代码,我们可以发现 DefaultConfig
方式,默认设置了允许的请求方式、允许的请求头、附带请求凭据时是否响应请求和预请求结果的缓存时间。
Default
方式就是在 DefaultConfig
方式的基础上,设置 AllowAllOrigins
选项为 true
,因为 DefaultConfig
方式默认不允许任意请求源,所以需要单独设置 AllowAllOrigins
选项为 true
。
func Default() gin.HandlerFunc { config := DefaultConfig() config.AllowAllOrigins = true return New(config) }
03
总结
本文我们介绍了 Go 语言框架 Gin 的中间件 CORS,该中间件提供了三种使用方式,我们可以按照实际开发需求选择合适的使用方式。
感兴趣的读者朋友们可以阅读该中间件的源码,重点熟悉每个配置项的作用。
推荐阅读:
参考资料: