在 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中文网其他相关文章!