Ошибка сети Axios на Cors Post с кодом состояния 200 - PullRequest
0 голосов
/ 14 мая 2018

Я использую axios для связи со своим собственным API (не написан на NodeJS).

Когда я публикую непростой запрос, axios всегда переходит непосредственно к блоку перехвата, отображающему сетевую ошибку в консоли, даже с двумя успешными запросами Http.

Headers requests

Ошибка: ошибка сети Трассировки стека: createError @ http://localhost:3000/static/js/bundle.js:1634:15 HandleError @ http://localhost:3000/static/js/bundle.js:1170:14


Также имеется предупреждение CORS об отсутствующем заголовке

Запрос перекрестного источника заблокирован: та же политика происхождения запрещает чтение удаленного ресурса в http://127.0.0.1:8080. (причина: отсутствует заголовок CORS «Access-Control-Allow-Origin») .

Однако он включен в запрос опций!

options

Когда я добавляю 'Access-Control-Allow-Origin': '*' в заголовки запросов Axios, предупреждение исчезает, но браузер не запускает запрос Post после успешного запроса Options.

Для полноты здесь приведены заголовки почтовых запросов.

post


код:

postForm = () => {
    axios.post("http://127.0.0.1:8080/",
            myComplexObj, {
                headers: {
                    //'Access-Control-Allow-Origin': '*',
                    'Content-Type': 'application/json'
                },
                timeout: 15000
            }
        ).then(res => {
            console.log(res);
            alert('success');
        })

        .catch(function(error) {
            //code always end up here
            console.log(error);
            /*Error: Network Error
           Stack trace:
           createError@http://localhost:3000/static/js/bundle.js:1634:15
           handleError@http://localhost:3000/static/js/bundle.js:1170:14
           */

            console.log(error.response);      //undefined
            console.log(error.response.data); //undefined
            }
        })

Любая помощь приветствуется. Что я пробовал:

  • Удалить тайм-аут // без изменений
  • Удалить блок Catch // все еще не удалось
  • Код состояния возврата 204 в параметрах и / или отправке запросов // без разницы

1 Ответ

0 голосов
/ 12 марта 2019

Вы сбиваете с толку, потому что статус 200, однако, браузер не позволит вам получить доступ к ответу на запрос CORS, если отсутствует заголовок Access-Control-Allow-Origin.

Вот несколько замечательных статей, которые объясняют, как работает CORS:

https://www.html5rocks.com/en/tutorials/cors/
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

Во всяком случае, я думаю, что вы используете Django. Итак, вам нужно добавить в settings.py:

CORS_ORIGIN_WHITELIST = (
   'localhost:8080',
   'localhost'
)

Или там, где у вас есть код аксиоса.

...