Как создать отдельный запрос cors, используя echo framework в golang с прокси-сервером и grpc в остальных API - PullRequest
0 голосов
/ 20 июня 2019

Я столкнулся с проблемой, которая была добавлена ​​в мои SetMiddlewares в промежуточном программном обеспечении golang как

.
e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
  AllowOrigins: []string{"*"},
  AllowHeaders: []string{echo.HeaderOrigin, echo.HeaderContentType, echo.HeaderAccept},
}))

У меня есть соединение GRPC и прокси-сервер, который я реализовал следующим образом

e := echo.New()
    e.Logger.SetLevel(log.DEBUG)
    e.Validator = new(bindings.Validator)

    // grpc connection group v1 and use middle for cors
    grpcAPI := e.Group("/api/v1", middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOrigins: []string{"*"},
        AllowMethods: []string{http.MethodGet, http.MethodPost},
    }))

    e.Group("/:route/api/v3", middleware.Proxy(middleware.NewRandomBalancer(utils.ProxyTargets(utils.TJXAPI, e))))

    // Set middlewares
    middlewares.SetMainMiddleware(e)

    // Set main routes
    api.MainGroup(e)

    // Set group routes
    api.V1Group(grpcAPI)

теперь в моем браузере установленный мной запрос cors *, но как только прокси-сервер создает запрос, Cross Origin имеет несколько источников, которые включают *, http://localhost:3000 из браузера, что приводит к сбою запроса для grpc и прокси-сервер.

Я попытался отфильтровать их, добавив оператор switch для отдельного использования cors на промежуточном программном обеспечении, но моя проблема заключается в том, как отфильтровать префиксы или путь, которые я указал в группе, а также

e := echo.New()
    e.Logger.SetLevel(log.DEBUG)
    e.Validator = new(bindings.Validator)

переменная e настроена на основное промежуточное ПО, это

func SetMainMiddlewareForGrpc(e *echo.Echo) {
    e.Use(middleware.RequestID())
    e.Use(middleware.Logger())
    e.Use(middleware.Recover())
    e.Use(middleware.CORSWithConfig(middleware.CORSConfig{
        AllowOrigins: []string{"*"},
        AllowMethods: []string{http.MethodGet, http.MethodPost, http.MethodOptions},
    }))
}

Я пытаюсь создать cors для отдельного запроса для grpc и прокси-сервера, но если кто-то попытается сделать это аккуратно и оптимизировать, будет очень признателен за вашу помощь.

...