在默认情况下,gin框架开发的api接口是不允许跨域的。如果调用方和我们的api接口不在同一个域名下,就会出现跨域错误。
been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.
解决这个问题比较简单,gin框架下可以这样操作
比如middleware包下
package middleware
import (
"github.com/gin-gonic/gin"
"net/http"
)
func CrossSite(c *gin.Context) {
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
//服务器支持的所有跨域请求的方法
c.Header("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE,UPDATE")
//允许跨域设置可以返回其他子段,可以自定义字段
c.Header("Access-Control-Allow-Headers", "Authorization, Content-Length, X-CSRF-Token, Token,session")
// 允许浏览器(客户端)可以解析的头部 (重要)
c.Header("Access-Control-Expose-Headers", "Content-Length, Access-Control-Allow-Origin, Access-Control-Allow-Headers")
//允许客户端传递校验信息比如 cookie (重要)
c.Header("Access-Control-Allow-Credentials", "true")
if c.Request.Method == "OPTIONS" {
c.JSON(http.StatusOK, "Options Request!")
}
c.Next()
}
上面就是定义了一个中间件,直接使用这个中间件就可以了
engine := gin.Default()
engine.Use(middleware.CrossSite)
后面还遇到了哪些问题和知识点将会继续进行总结。
演示网站: