сервер, работающий на локальном хосте: 8080 получает CORS из внешнего интерфейса, запущенного на 9090

У меня есть API-сервер (gin-gonic), работающий на localhost: 8080. Все типичные CORS-заголовки настроены для отладки: когда я пытаюсь протестировать API с помощью простого Frontend (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) приветствуются.

Он отлично работает в Postman или CURL

Сообщение об ошибке в браузере:  Сообщение об ошибке CORS


person Paul Oskar Mayer    schedule 29.12.2018    source источник
comment
вы можете включить полученное сообщение об ошибке?   -  person Henry Woody    schedule 29.12.2018
comment
Должны ли три строки не устранять все проблемы CORS? Нет. При использовании Origin вы также используете учетные данные? Если так, "*" потерпит неудачу. В этом случае вы должны вместо * передать начало координат. Заголовки не поддерживает не разрешать "*".   -  person mkopriva    schedule 29.12.2018
comment
Спасибо за быстрый отзыв. Скриншот или ошибка прилагается.   -  person Paul Oskar Mayer    schedule 30.12.2018
comment
@mkopriva, я пробовал это также с c.Writer.Header (). Set (Access-Control-Allow-Headers, Content-Type, Content-Length, Accept-Encoding, X-CSRF-Token, Authorization, accept, origin, Cache-Control, X-Requested-With) Тот же результат   -  person Paul Oskar Mayer    schedule 30.12.2018
comment
Не похоже, что из запроса что-то возвращается. Фактически, это похоже на код состояния HTTP, отличный от 200. Какой код статуса возвращается по вашему запросу?   -  person Adam McGurk    schedule 30.12.2018


Ответы (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")
}
person Maxim    schedule 30.12.2018
comment
Я пробовал это с помощью cors github.com/rs/cors/wrapper/gin. Работает отлично. Но я не понимаю почему. - person Paul Oskar Mayer; 30.12.2018