首页 > 后端开发 > Golang > 如何在Go Gin中正确配置CORS中间件来处理OPTIONS请求?

如何在Go Gin中正确配置CORS中间件来处理OPTIONS请求?

Susan Sarandon
发布: 2024-12-21 03:10:09
原创
463 人浏览过

How to Properly Configure CORS Middleware in Go Gin to Handle OPTIONS Requests?

在 Go Gin 框架中启用 CORS

Go gin 框架提供了一个强大的中间件,用于在您的应用程序中启用 CORS(跨源资源共享)应用程序。通过将此中间件添加到您的应用程序,您可以允许来自不同来源的请求访问您的 API 端点。

考虑以下 CORS 中间件实现:

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 但在 OPTION 请求后没有进一步操作,您可能错过了一个关键的问题步骤:

修复:

func CORSMiddleware() gin.HandlerFunc {<pre class="brush:php;toolbar:false">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()
}
登录后复制

}
pre>

在更新的中间件中, c.AbortWithStatus(204) 将返回没有任何正文的响应状态 204 No Content,表示 OPTIONS 请求成功并允许客户端继续实际请求。

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

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板