Создание golang Gorilla CORS обработчик работы

у меня довольно простая настройка здесь, как описано в коде ниже. Но я не могу получить CORS на работу. Я продолжаю получать эту ошибку:

XMLHttpRequest не удается загрузить http://localhost:3000/signup. Ответ на предварительный запрос не проходит проверку контроля доступа: нет доступа- Заголовок Control-Allow-Origin присутствует на запрашиваемом ресурсе. Происхождение'http://localhost:8000 ' поэтому доступ запрещен. Этот ответ код состояния HTTP 403.

Я уверен, что мне не хватает чего-то простого здесь.

вот код, который у меня есть:

package main

import (
    "log"
    "net/http"

    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
    "myApp/src/controllers"
)

func main() {
    ac := new(controllers.AccountController)

    router := mux.NewRouter()
    router.HandleFunc("/signup", ac.SignUp).Methods("POST")
    router.HandleFunc("/signin", ac.SignIn).Methods("POST")

    log.Fatal(http.ListenAndServe(":3000", handlers.CORS()(router)))
}

3 ответов


пожалуйста, прочитайте ссылку, предложенную Маркусом, а также о том, что вызывает запросы CORS перед полетом.

предполетной запросы: у вас может быть тип контента, такой как JSON, или какой-то другой пользовательский заголовок, который запускает запрос перед полетом, который ваш сервер может не обрабатывать. Попробуйте добавить этот, если вы используете постоянно распространенный AJAX в своем интерфейсе:https://en.wikipedia.org/wiki/List_of_HTTP_header_fields#Requested-With

гориллы handlers.CORS() установит разумные значения по умолчанию, чтобы основы CORS работали для вас; однако вы можете (и, возможно, должны) взять под контроль более функциональным образом.

вот стартер код:

headersOk := handlers.AllowedHeaders([]string{"X-Requested-With"})
originsOk := handlers.AllowedOrigins([]string{os.Getenv("ORIGIN_ALLOWED")})
methodsOk := handlers.AllowedMethods([]string{"GET", "HEAD", "POST", "PUT", "OPTIONS"})

// start server listen
// with error handling
log.Fatal(http.ListenAndServe(":" + os.Getenv("PORT"), handlers.CORS(originsOk, headersOk, methodsOk)(router)))

вы должны создать


вы можете получить более подробную информацию здесь: "нет заголовка" Access-Control-Allow-Origin "на запрошенном ресурсе" об этой проблеме.

также попробуйте этот обработчик: Go CORS Handler что должно решить вашу проблему. Я считаю, что это намного чище и легко решить проблему.

package main

import (
    "log"
    "net/http"
    "github.com/rs/cors"
    "github.com/gorilla/handlers"
    "github.com/gorilla/mux"
    "myApp/src/controllers"
)

func main() {
    ac := new(controllers.AccountController)

    router := mux.NewRouter()
    router.HandleFunc("/signup", ac.SignUp).Methods("POST")
    router.HandleFunc("/signin", ac.SignIn).Methods("POST")

    c := cors.New(cors.Options{
    AllowedOrigins: []string{"http://localhost:8000"},
    AllowCredentials: true,
    })

    handler := c.Handler(router)

    log.Fatal(http.ListenAndServe(":3000", handler )
}