Go 框架 Gin 怎么实现允许前端跨域请求?

2023-03-13 10:37:08 浏览数 (1)

大家好,我是 frank。 欢迎大家点击标题下方蓝色文字「Golang 语言开发栈」关注公众号。 设为星标,第一时间接收推送文章。 文末扫码,加群一起学 Golang 语言。

01

介绍

在前后端分离的项目中,前端在请求服务端提供的接口时,往往会遇到跨域请求的问题,服务端可以通过 CORS 的方式解决,限于篇幅,关于跨域和 CORS 的详细介绍,读者朋友们可以自行查阅相关资料。

Go 框架 Gin 官方提供了 CORS 中间件,可以很方便地实现使用 CORS 解决跨域问题,本文我们介绍该 Gin 中间件的使用方式。

02

使用方式

在介绍 Gin 中间件 CORS 的使用方式之前,我们需要先使用命令安装该中间件,go get github.com/gin-contrib/cors

在 Go 框架 Gin 中使用 CORS 中间件非常简单,只需使用 Use 方法,将中间件绑定到路由中。

CORS 中间件提供三个函数,代表三种使用方式,分别是 NewDefaultConfigDefault

New 方式

其中 New 函数,可以接收 CORS 中间件的配置项,可通过自定义配置项,满足任意需要跨域的场景。

示例代码:

代码语言:javascript复制
...
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 允许的请求方式,默认值是 GETPOSTPUTPATCHDELETEHEAD,和 OPTIONS
  • AllowHeaders []string 用在对预请求的响应中,指示实际的请求中可以使用哪些 HTTP 请求头。
  • AllowCredentials bool 表示请求附带请求凭据时是否响应请求,例如 cookieHTTP 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 方式就是默认设置一些通用配置项,我们可以直接使用,也可以在此基础上添加我们需要的其他配置项。

代码语言:javascript复制
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 方式

Default 方式就是在 DefaultConfig 方式的基础上,设置 AllowAllOrigins 选项为 true,因为 DefaultConfig 方式默认不允许任意请求源,所以需要单独设置 AllowAllOrigins 选项为 true

代码语言:javascript复制
func Default() gin.HandlerFunc {
 config := DefaultConfig()
 config.AllowAllOrigins = true
 return New(config)
}

03

总结

本文我们介绍了 Go 语言框架 Gin 的中间件 CORS,该中间件提供了三种使用方式,我们可以按照实际开发需求选择合适的使用方式。

感兴趣的读者朋友们可以阅读该中间件的源码,重点熟悉每个配置项的作用。

推荐阅读:

  1. Go 语言怎么解决编译器错误“err is shadowed during return”?
  2. Golang 语言怎么高效使用字符串?
  3. Golang 语言的编程技巧之类型
  4. Golang 语言中的非类型安全指针
  5. Golang 语言临时对象池 - sync.Pool

参考资料:

  1. https://github.com/gin-contrib/cors
  2. https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS

0 人点赞