首页 >后端开发 >Golang >如何在Go的Gin框架中正确配置CORS中间件?

如何在Go的Gin框架中正确配置CORS中间件?

Patricia Arquette
Patricia Arquette原创
2024-12-23 03:00:54219浏览

How to Properly Configure CORS Middleware in Go's Gin Framework?

Go Gin 框架:处理 CORS(跨源资源共享)

在 Go 的 gin 框架中,配置跨源资源共享(CORS)允许来自不同源的客户端访问您的资源。但是,您可能会遇到 CORS 请求未返回预期行为的问题,例如用户在发送 OPTIONS 请求后遇到空响应的情况。

要解决此问题,我们可以分析用户的提供的中间件并将其与工作的进行比较示例:

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()
        }
    }
}
func CORSMiddleware() gin.HandlerFunc {
    return func(c *gin.Context) {
        c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
        c.Writer.Header().Set("Access-Control-Allow-Credentials", "true")
        c.Writer.Header().Set("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")
        c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")

        if c.Request.Method == "OPTIONS" {
            c.AbortWithStatus(204)
            return
        }

        c.Next()
    }
}

差异:

  • 中止状态代码:工作中间件中止,状态代码为204(无内容)用于 OPTIONS 请求,而用户的中间件中止200(OK)。
  • 允许的方法:工作中间件仅允许 POST、OPTIONS、GET 和 PUT 方法,而用户中间件包括 DELETE 和 UPDATE。

因此,为了解决这个问题,用户应该更新他们的中间件以匹配工作示例,特别是通过更正中止状态代码并调整允许的方法。

以上是如何在Go的Gin框架中正确配置CORS中间件?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn