Go语言 杜松子酒CORS未增加应答

3z6pesqy  于 2023-09-28  发布在  Go
关注(0)|答案(2)|浏览(109)

我用的是golang杜松子酒,我得到了这个错误

我知道这是一个CORS错误,我在NodeJS中修复了它,但这次我使用的是golang,因此无法修复它。
我绕过了这个包https://github.com/gin-contrib/cors并修改了代码

r := gin.Default()
r.Use(cors.New(cors.Config{
    AllowOrigins:     []string{"http://localhost:5173"},
    AllowMethods:     []string{"PUT", "PATCH", "POST"},
    AllowHeaders:     []string{"Origin"},
    ExposeHeaders:    []string{"Content-Length", "Content-Type"},
    AllowFiles:       true,
    AllowCredentials: true,
    AllowOriginFunc: func(origin string) bool {
        return origin == "http://localhost:5173"
    },
}))

`
但问题是,这个错误仍然出现。

toe95027

toe950271#

浏览器正在抱怨,因为服务器不允许,在允许的头中,头'Content-type'。在允许的标题列表中添加此标题,则CORS将停止抱怨。

m0rkklqb

m0rkklqb2#

您似乎对cors.Config结构中ExposeHeaders字段的用途感到困惑。我能理解你的困惑:字段名-ExposeResponseHeaders(以牺牲简洁性为代价)可能会更清楚,其文档也没有特别说明……
ExposeHeaders结构域指定哪些 response header名称将在Access-Control-Expose-Headers header中列出,这指示浏览器让客户端访问这些响应header的值。但是,AFAICT,这不是你想在这里做的。相反,您希望允许包含名为Content-Type的头的请求。要做到这一点,您需要修改CORS配置中AllowHeaders结构体字段的值,如下所示:

AllowHeaders: []string{"Content-Type"},

请注意,根据Fetch标准,在CORS配置中允许Origin作为请求头是不必要的,因为该头由浏览器而不是客户端管理。
此外,您使用AllowOriginFunc是多余的。AllowOrigins已经足够满足您当前的需求。
最后,您可能会发现jub0bs/fcorsgin-contrib/corshere is an example)更容易配置,但我当然有偏见。

相关问题