решить проблему с CORS. Загружаю yaml в SwaggerUI, установленный на моем сервере, и получаю в браузере ошибку "Запрос из постороннего источника заблокирован: Политика одного источника запрещает чтение удаленного ресурса на http://xxx.xxx.xxx.xxx:8080/. (Причина: не удалось выполнить запрос CORS)."
Беру пример из https://github.com/rs/cors и копирую его в функцию setupGlobalMiddleware:
func setupGlobalMiddleware(handler http.Handler) http.Handler {
c := cors.New(cors.Options{
AllowedOrigins: []string{"http://swg.domain.ru:8080"},
AllowCredentials: true,
// Enable Debugging for testing, consider disabling in production
Debug: true,
})
Далее запускаю сервер, но ошибка не уходит.
Подскажите, пожалуйста, что я не так делаю?
Спасибо!
// Insert the middleware
handler = c.Handler(handler)
return handler
}
вы делаете запрос на приватный роут?
Если да и если вы используете Cookie, то проблема может быть в их настройке.
Я добавил в yaml свой host. С oapi-codegen у меня получилось сделать так: import ( "flag" "fmt" "os" "net/http" ... e.Use(echomiddleware.CORSWithConfig(echomiddleware.CORSConfig{ AllowOrigins: []string{"http://swg.domain.ru", "http://xxx.xxx.xxx.xxx"}, AllowMethods: []string{http.MethodGet, http.MethodPut, http.MethodPost, http.MethodDelete}, })) ... но тут что-то не сработало
Cookie не использую, запрос идет на открытые роуты paths: /: get: tags: - todos operationId: findTodos parameters: - name: since in: query type: integer format: int64 - name: limit in: query type: integer format: int32 default: 20 responses: 200: description: list the todo operations schema: type: array items: $ref: "#/definitions/item" default: description: generic error response schema: $ref: "#/definitions/error"
поглядите в панель разработчика, может найдёте чего там (вкладка Network) делаете запрос, смотрите какие заголовки отправляются и приходят
Accept application/io.goswagger.examples.todo-list.v1+json Accept-Encoding gzip, deflate Accept-Language ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3 Connection keep-alive Host xxx.xxx.xxx.xxx:8080 Origin http://swg.domain.ru Referer http://swg.domain.ru/ User-Agent Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:87.0) Gecko/20100101 Firefox/87.0 Т.е. заголовки CORS не формируются. А вариант один сейчас: c := cors.New(cors.Options{ AllowedOrigins: []string{"http://swg.domain.ru:8080"}, AllowCredentials: true, // Enable Debugging for testing, consider disabling in production Debug: true, })
Вам надо в миддлваре обработать cors, https://play.golang.org/p/tYXSZwMXW_- может поможет как-то. Но эта ошибка срабатывает если вы с чужого фронта лезете в свой бэкенд. Пока не могу найти свой полноценный код, это в основном для разработки. Когда запускаете фронт и бэк и пытаетесь работать. В продакшн такого кода не должно быть.
А в глобал миддлваре вам надо ссылку на функцию, сам код туда пихать не обязательно, я обычно кладу в отдельную папку.
Обсуждают сегодня