Axe ios frontend для Golang внутренних проблем CORS - PullRequest
0 голосов
/ 30 марта 2020

В настоящее время схожу с ума с CORS. У меня есть приложение Vue. js, использующее Ax ios для отправки данных в службу Golang (с использованием Gorilla Mux и Handlers). Оба приложения работают на одном хосте.

Вызов Ax ios выглядит следующим образом:

const axios = require('axios');

const options = {
    url: 'http://' + window.location.hostname + ':4002',
    method: 'POST',
    headers: {
        'Accept': 'application/json',
                    'Content-Type': 'application/json;charset=UTF-8'
    },
    data: {
        MyField1: "MyData1",
        MyField2: {
            MyField3: "MyData2"
        }
    }
};

axios(options)
    .then(response => {
        console.log(response.status);
    });

Сервер Golang выглядит следующим образом:

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

    router := mux.NewRouter()
    router.HandleFunc("/", HandleRequest).Methods("POST", "OPTIONS")

    log.Fatal(http.ListenAndServe(":4002", handlers.CORS(originsOk, headersOk, methodsOk)(router)))
}

func HandleRequest(w http.ResponseWriter, r *http.Request) {
    ...
}

Это результат нескольких часов поиска того, как заставить это работать. Я многократно ссылался на этот ответ, и при тестировании с CURL я получаю следующее (наряду с другой избыточной информацией):

< HTTP/1.1 200 OK
< Access-Control-Allow-Headers: X-Requested-With
< Access-Control-Allow-Origin: *
< Date: Sun, 29 Mar 2020 23:32:28 GMT
< Content-Length: 0

Это заставляет меня верить, что все должно работать нормально, но я по-прежнему вижу 403 в Firefox средства просмотра сети и следующее в консоли:

Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://<ip>:4002/. (Reason: CORS request did not succeed).
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at http://<ip>:4002/. (Reason: CORS request did not succeed).
Error: Network Error

Вся информация, которую я могу найти, заставляет меня поверить, что я не должен видеть эту ошибку в этот момент - любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 30 марта 2020

Наконец исправил это, изменив код Go на это:

cors := handlers.CORS(
    handlers.AllowedHeaders([]string{"content-type"}),
    handlers.AllowedOrigins([]string{"*"}),
    handlers.AllowCredentials(),
)

router := mux.NewRouter()
router.HandleFunc("/", HandleRequest).Methods("POST", "OPTIONS")

router.Use(cors)

log.Fatal(http.ListenAndServe(":4002", (router)))
...