Go Gin 处理跨域问题解决

 更新时间:2024年05月15日 09:56:17   作者:比猪聪明  
在前后端分离的项目中,经常会遇到跨域问题,本文主要介绍了Go Gin 处理跨域问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

方式1:JSOPN: jsonp请求 主要用来解决跨域问题

请注意,JSONP是一种较老的技术,其使用已被现代浏览器支持的更现代的跨源资源共享(CORS)机制所取代。如果可能,考虑在你的Go Gin应用程序中实现CORS,因为它相比JSONP提供了更好的安全性和灵活性。然而,如果您需要支持旧版客户端或CORS不可行的特定场景,JSONP仍可作为一种可行的解决方案。

//jsonp请求 主要用来解决跨域问题
//http://127.0.0.1:8080/jsonp?callback=call
//call({"title":"标题-jsonp","desc":"说明-jsonp","content":"内容-jsonp"});
r.GET("/jsonp", func(c *gin.Context) {
	//实例化一个结构体
	a := &Article{
		Title:   "标题-jsonp",
		Desc:    "说明-jsonp",
		Content: "内容-jsonp",
	}
	c.JSONP(200, a)
})

方式2:使用第三方库 github.com/gin-contrib/cors

Go Gin 框架中处理跨域(Cross-Origin Resource Sharing, CORS)问题非常直接,可以通过中间件(Middleware)来实现。CORS 是一种标准机制,允许 Web 应用程序在跨域访问资源时,通过设置特定的 HTTP 响应头来放宽浏览器的同源策略限制。下面是如何在 Go Gin 中配置和启用 CORS 中间件

1. 导入第三方库 github.com/gin-contrib/cors

Gin 框架自身并未内置 CORS 支持,但有一个官方推荐的、与 Gin 高度集成的第三方库 github.com/gin-contrib/cors 可以方便地解决这个问题。首先,在你的项目中添加此依赖:

go get -u github.com/gin-contrib/cors

2. 配置 CORS 规则

接下来,创建一个 cors.Config 结构体实例,用于定义你的 CORS 策略。以下是一些常见的配置选项:

// 我一般放到utils或者conf包
package conf

import (
    "github.com/gin-contrib/cors"
)

var CorsConfig = cors.Config{
    // 允许所有来源(包括子域和端口)。生产环境中应替换为具体的允许域名。
    AllowOrigins: []string{"*"},
    
    // 允许的HTTP方法列表,如 GET、POST、PUT等。默认为["*"](全部允许)
    AllowMethods: []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},

    // 允许的HTTP头部列表。默认为["*"](全部允许)
    AllowHeaders: []string{"Origin", "Content-Length", "Content-Type", "Authorization"},

    // 是否允许浏览器发送Cookie。默认为false
    AllowCredentials: true,

    // 预检请求(OPTIONS)的缓存时间(秒)。默认为5分钟
    MaxAge: 60 * 5,
}

3. 使用 CORS 中间件

在 Gin 的路由器(r := gin.Default() 或 r := gin.New())上应用 CORS 中间件:

r := gin.Default()

// 使用配置好的CORS规则
r.Use(cors.New(conf.CorsConfig))// 根据包位置需要导入包才能使用

// 注册你的路由和处理函数...

这样,所有经过这个路由器的请求都会先经过 CORS 中间件的处理,自动添加相应的 CORS 响应头。根据你配置的规则,浏览器会允许符合条件的跨域请求成功执行。

在实际应用中,根据具体的安全需求和交互模式,对 CorsConfig 进行适当的调整。例如,将 AllowOrigins 替换为你允许的特定源(如 "https://example.com"),或仅允许特定的 HTTP 方法和头部。确保你的 CORS 策略既满足功能需求,又能有效保护应用程序的安全性。

到此这篇关于Go Gin 处理跨域问题解决的文章就介绍到这了,更多相关Go Gin 跨域内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Go标准库常见错误分析和解决办法

    Go标准库常见错误分析和解决办法

    Go语言的标准库为开发者提供了丰富且高效的工具,涵盖了从网络编程到文件操作等各个方面,然而,标准库虽好,使用不当却可能适得其反,正所谓"工欲善其事,必先利其器",本文将深入剖析Go标准库使用中的常见错误,帮助开发者避开这些坑,写出更加健壮的代码
    2025-04-04
  • Go并发编程避坑指南之如何彻底解决死锁Deadlock问题

    Go并发编程避坑指南之如何彻底解决死锁Deadlock问题

    在Go语言的并发编程中,死锁(Deadlock)是一种极其隐蔽且致命的错误,本文将带你深入剖析死锁的成因,并结合 sync 包与 context 包,提供一套行之有效的解决方案,希望对大家有所帮助
    2026-04-04
  • 详解Golang net/http包中的RoundTripper接口

    详解Golang net/http包中的RoundTripper接口

    RoundTripper 是 net/http 包中的一个接口,定义了处理 HTTP 请求返回和响应的方法,是 http.Client 结构体中执行 http 请求的核心部分,本文将详细的给大家介绍Golang RoundTripper接口,需要的朋友可以参考下
    2023-09-09
  • golang 40行代码实现通用协程池

    golang 40行代码实现通用协程池

    golang协程机制很方便的解决了并发编程的问题,但是协程并不是没有开销的,所以也需要适当限制一下数量。这篇文章主要介绍了golang 40行代码实现通用协程池,需要的朋友可以参考下
    2018-08-08
  • Golang Printf,Sprintf,Fprintf 格式化详解

    Golang Printf,Sprintf,Fprintf 格式化详解

    这篇文章主要介绍了Golang Printf,Sprintf,Fprintf 格式化详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-03-03
  • Golang实现读取ZIP压缩包并显示Gin静态html网站

    Golang实现读取ZIP压缩包并显示Gin静态html网站

    这篇文章主要为大家详细介绍了如何通过Golang实现从ZIP压缩包读取内容并作为Gin静态网站显示,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-07-07
  • golang内存对齐的项目实践

    golang内存对齐的项目实践

    本文主要介绍了golang内存对齐的项目实践,内存对齐不仅有助于提高内存访问效率,还确保了与硬件接口的兼容性,是Go语言编程中不可忽视的重要优化手段,下面就来介绍一下
    2025-02-02
  • Go 验证字符串中是否包含中文(推荐)

    Go 验证字符串中是否包含中文(推荐)

    这篇文章主要介绍了Go 验证字符串中是否包含中文,本文通过实例代码给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-01-01
  • Go语言之io.ReadAtLeast函数的基本使用和原理解析

    Go语言之io.ReadAtLeast函数的基本使用和原理解析

    io.ReadAtLeast函数是Go语言标准库提供的一个工具函数,能够从数据源读取至少指定数量的字节数据到缓冲区中,这篇文章主要介绍了io.ReadAtLeast函数的相关知识,需要的朋友可以参考下
    2023-07-07
  • Golang中切片长度和容量的区别示例详解

    Golang中切片长度和容量的区别示例详解

    切片长度与容量在Go中很常见,切片长度是切片中可用元素的数量,而切片容量是从切片中第一个元素开始计算的底层数组中的元素数量,这篇文章主要给大家介绍了关于Golang中切片长度和容量区别的相关资料,需要的朋友可以参考下
    2024-01-01

最新评论