localhost:8080 上的服务器 运行 在 9090 上从前端 运行 获取 CORS

server running on localhost:8080 getting CORS from frontend running on 9090

我在 localhost:8080 上有一个 API-server (gin-gonic) 运行。 所有典型的 CORS-Header 都设置为调试: 当我尝试使用简单的前端 (swagger-ui) 测试 API 时,出现了 CORS 错误。 (大摇大摆是 localhost:9090 上的 运行)

当一切都运行在同一个域上时它有效。

c.Writer.Header().Set("Access-Control-Allow-Origin", "*")
c.Writer.Header().Set("Access-Control-Allow-Headers", "*")
c.Writer.Header().Set("Access-Control-Allow-Methods", "POST, OPTIONS, GET, PUT")

为什么这不起作用。难道这 3 行不能解决所有 CORS 问题吗?

我非常想知道实际的解释,而不是简单的解决方案。欢迎所有与此相关的资源(或有关 CORS 的好资源)。

在 Postman 或 CURL 中工作正常

浏览器中的错误消息:

当您将 OPTION 作为 Preflight 请求捕获时 您的服务器应该 return 成功。我在您提供的代码中找不到 return。

你也可以尝试使用https://github.com/rs/cors

package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
    cors "github.com/rs/cors/wrapper/gin"
)

func main() {
    router := gin.Default()

    router.Use(cors.Default())
    router.GET("/", func(context *gin.Context) {
        context.JSON(http.StatusOK, gin.H{"hello": "world"})
    })

    router.Run(":8080")
}