为什么在使用 CORS 时 go 服务器响应 307

我有一个非常简单的带有 CORS 中间件的应用程序,它似乎可以正常工作并且预检请求按预期工作。但由于某种原因,服务器根据实际请求以 307 响应。在浏览器中重现,来自 postman works correclty。


func main() {

    router := gin.Default()

    router.Use(CORSMiddleware())


    accountsGroup := router.Group("/accounts")

    accountsGroup.POST("/", postAccount)

    router.Run("localhost:8080")

}


func CORSMiddleware() gin.HandlerFunc {

    return func(c *gin.Context) {

    c.Header("Access-Control-Allow-Origin", "*")

    c.Header("Access-Control-Allow-Credentials", "true")

    c.Header("Access-Control-Allow-Headers", "Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With")

    c.Header("Access-Control-Allow-Methods", "POST,HEAD,PATCH, OPTIONS, GET, PUT")


    if c.Request.Method == "OPTIONS" {

        c.AbortWithStatus(204)

        return

    }


    c.Next()

}



func postAccount(c *gin.Context) {

    response := gin.H{"id": 1}

    c.IndentedJSON(http.StatusCreated, response)

}

飞行前反应

http://img2.mukewang.com/638d61cc0001c09d06180908.jpg

实际要求

http://img1.mukewang.com/638d61d800015f9306230973.jpg


森栏
浏览 126回答 1
1回答

侃侃无极

您已经在 下注册了处理程序,/accounts/但您正在向 发出请求/accounts。加上RedirectTrailingSlash默认设置为的设置true是导致重定向的原因。如果当前路由无法匹配但存在带(不带)尾部斜杠的路径的处理程序,则启用自动重定向。例如,如果/foo/被请求但路由仅存在于/foo,则客户端将重定向到请求 和所有其他请求方法/foo的 http 状态代码。301GET307
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go