网站在线客服系统GOFLY代码开发日志-9: gin框架解决跨域问题

Golang
285
0
0
2022-09-06

在默认情况下,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)

后面还遇到了哪些问题和知识点将会继续进行总结。

演示网站:

gofly.sopans.com