51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 995|回复: 0
打印 上一主题 下一主题

如何Gin实现允许前端跨域请求之Go 框架?

[复制链接]
  • TA的每日心情
    无聊
    前天 09:14
  • 签到天数: 938 天

    连续签到: 5 天

    [LV.10]测试总司令

    跳转到指定楼层
    1#
    发表于 2022-12-27 14:43:36 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    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,该中间件提供了三种使用方式,我们可以按照实际开发需求选择合适的使用方式。
      感兴趣的读者朋友们可以阅读该中间件的源码,重点熟悉每个配置项的作用。

    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-4-28 08:09 , Processed in 0.064339 second(s), 23 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表