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

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

1、介绍

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

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

2、使用方式

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

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

CORS 中间件提供三个函数,代表三种使用方式,分别是 New、DefaultConfig 和 Default。

New 方式

其中 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 方式

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

func Default() gin.HandlerFunc {
config := DefaultConfig()
config.AllowAllOrigins = true
return New(config)
}

3、总结

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

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

参考资料:

​https://github.com/gin-contrib/cors​

​https://developer.mozilla.org/en-US/docs/Web/HTTP/CORS​

责任编辑:武晓燕 来源: Golang语言开发栈
相关推荐

2017-05-25 09:45:35

2024-01-30 12:08:31

Go框架停止服务

2016-11-01 21:51:03

phpjavascript

2023-03-06 08:37:58

JavaNIO

2024-11-04 08:16:08

Go语言Web 框架

2024-12-16 00:48:39

Gin框架函数

2011-01-24 13:12:01

AjaxDojojavascript

2022-10-17 09:02:49

Go自动验证数据绑定

2017-08-20 12:49:59

浏览器跨域服务器

2024-02-19 07:40:10

2024-03-05 07:55:41

框架GINGo

2021-06-06 13:05:15

前端跨域CORS

2024-12-09 00:00:15

Gin框架中间件

2024-08-28 08:45:22

2021-06-10 18:11:02

Cors跨域Web开发Cors

2018-11-26 14:52:12

Web前端跨域

2023-12-12 09:45:16

前端浏览器

2021-06-15 07:32:59

Cookie和Sess实现跨域

2022-04-01 12:38:32

cookie代码面试

2022-04-29 09:11:14

CORS浏览器
点赞
收藏

51CTO技术栈公众号