Сервер, работающий на локальном хосте:8080 получает CORS от внешнего интерфейса, работающего на 9090
У меня есть API-сервер (gin-gonic), работающий на localhost:8080. Все типичные CORS-заголовки настроены на отладку: когда я пытаюсь протестировать API с помощью простого интерфейса (swagger-ui), я получаю 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")
почему это не работает Должны ли 3 строки не держать все проблемы с CORS подальше?
Мне очень любопытны фактические объяснения, а не простое решение. Все ресурсы, касающиеся этого (или хорошего о CORS), приветствуются.
Работает нормально в Почтальоне или CURL
1 ответ
Когда вы перехватываете OPTION в качестве запроса Preflight, ваш сервер должен вернуть результат. Я не могу найти возврат в предоставленном вами коде.
Также вы можете попробовать использовать 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")
}