我使用Go gin框架gin
func CORSMiddleware() gin.HandlerFunc {
return func(c *gin.Context) {
c.Writer.Header().Set("Content-Type", "application/json")
c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Max-Age", "86400")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, GET, OPTIONS, PUT, DELETE, UPDATE")
c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, X-Max")
c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
if c.Request.Method == "OPTIONS" {
c.AbortWithStatus(200)
} else {
c.Next()
}
}
}
我得到了状态代码:200 OK,但是OPTIONS请求后没有任何React。看起来我错过了什么,但是我不明白我错在哪里。
有人能帮帮我吗?
9条答案
按热度按时间gjmwrych1#
FWIW,这是我的CORS中间件,适合我的需要。
omvjsjqw2#
还有官方的gin中间件用于处理CORS请求github.com/gin-contrib/cors。
您可以使用
$ go get github.com/gin-contrib/cors
安装它,然后将此中间件添加到应用程序中,如下所示:程序包干线5f0d552i3#
那就用它
xkrw2x1b4#
我花了大概一个小时的时间来弄明白为什么互联网上的一些例子可以工作,而另一些不行。所以我明白了其中的区别--行的顺序很重要,首先你应该使用config,然后声明你的端点,而不是相反的方式。
作品:
不起作用:
mccptt675#
有一个包https://github.com/rs/cors,它可以正确地处理CORS请求。它包含了流行路由器的示例,包括
gin
。一般情况下,只需在
gin
中间件中添加router.Use(cors.Default())
的默认处理即可。3zwjbxry6#
我们创建了一个最小的中间件。
并注册到gin中间件:
vtwuwzda7#
这对我很有效-注意:直接设置报头。
n7taea2i8#
使用
gin-contrib/cors
在我的例子中,在此之前我有一个JWT令牌中间件,它阻塞了所有OPTION预处理请求,把CORS中间件放在第一位解决了这个问题。
rhfm7lfc9#
我的前端添加了一个尾随斜线的网址,因为我得到的CORS,做尾随斜线检查。