Сервер, работающий на локальном хосте: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")
}
Другие вопросы по тегам