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

时间:2018-12-29 00:19:23

标签: go gin-gonic

我有一个在本地主机上运行的API服务器(gin-gonic):8080。 所有典型的CORS-Header均已设置为用于调试: 当我尝试使用简单的前端(swagger-ui)测试API时,出现CORS错误。 (swagger在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")

这为什么不起作用。这三行代码是否不能解决所有CORS问题?

我对实际的解释而不是简单的解决方案感到好奇。欢迎获得与此相关的所有资源(或有关CORS的好资源)。

它在Postman或CURL中正常工作

浏览器中的错误消息: CORS Error Message

1 个答案:

答案 0 :(得分:1)

当您将OPTION作为预检请求时  您的服务器应该返回成功。在您提供的代码中找不到退货。

您也可以尝试使用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")
}