1.为什么解决跨域问题?
跨域问题是指在浏览器中,当一个客户端JavaScript脚本向不同域名或端口的服务器发起HTTP请求时,浏览器会出于安全考虑阻止该请求。这是由于同源策略所导致的。
Golang 通常用于编写 Web API 服务,因此也需要处理跨域请求。如果您的 Golang 项目用于提供服务给不同的域名、IP 或端口的客户端,则可能会遇到跨域问题。
解决跨域问题可以使客户端能够从不同的域名或端口访问您的 Golang 服务,并确保数据能够正常传输。一种解决方案是在服务器端设置 CORS(跨域资源共享)头部,通过这种方式告诉浏览器允许该请求。还有其他一些解决方案,例如 JSONP 和反向代理等,但最常见的方法是使用 CORS。
2.解决方法
1.添加跨域的中间件
代码:
package middleware
import (
"github.com/gin-gonic/gin"
"net/http"
)
// 处理跨域请求,支持options访问
func Cors() gin.HandlerFunc {
return func(c *gin.Context) {
method := c.Request.Method
origin := c.Request.Header.Get("Origin")
c.Header("Access-Control-Allow-Origin", origin)
c.Header("Access-Control-Allow-Headers", "Content-Type,AccessToken,X-CSRF-Token, Authorization, Token,X-Token,X-User-Id")
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS,DELETE,PUT")
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers, Content-Type")
c.Header("Access-Control-Allow-Credentials", "true")
// 放行所有OPTIONS方法
if method == "OPTIONS" {
c.AbortWithStatus(http.StatusNoContent)
}
// 处理请求
c.Next()
}
}
2.在接口的路径上面配置中间件
3.结果展示
浏览器上可以显示后端返回给前端的结果