В каких случаях делается HTTP-запрос, но ответ не получен? - PullRequest
0 голосов
/ 16 сентября 2018

Я использую axios, чтобы сделать HTTP-запрос и получаю ошибку.Это фрагмент из axios docs , в котором говорится об обработке ошибок.

axios.get('/user/12345')
  .catch(function (error) {
    if (error.response) {
      // The request was made and the server responded with a status code
      // that falls out of the range of 2xx
      console.log(error.response.data);
      console.log(error.response.status);
      console.log(error.response.headers);
    } else if (error.request) {
      // The request was made but no response was received
      // `error.request` is an instance of XMLHttpRequest in the browser and an instance of
      // http.ClientRequest in node.js
      console.log(error.request);
    } else {
      // Something happened in setting up the request that triggered an Error
      console.log('Error', error.message);
    }
    console.log(error.config);
  });

В моем случае error.request оказывается верным, что означает (в соответствии с документами) запрос был сделан, но ответ не был получен.У меня вопрос, что может быть причиной?в каких случаях делается запрос, но ответ не получен?

Спасибо

Ответы [ 2 ]

0 голосов
/ 09 апреля 2019

Часто это происходит по двум причинам:

1.Запрос OPTIONS не выполнен.

Основные причины в моей практике:

  • сервер проверяет авторизацию на запрос OPTIONS

  • сервер отправляет неправильные заголовки

  • сервер делает некоторое перенаправление

Подробнее о запросах OPTIONS

2.Сетевые проблемы.

Я часто видел это в корпоративных сетях с большим количеством межсетевых экранов.Если нет способа исправить проблемы с сетью, обычно помогают агрессивные повторные попытки.

if (err && err.request && !err.response && navigator.onLine !== false) {
  // try again ...
}
0 голосов
/ 16 сентября 2018

Единственный способ получить .catch(), если от конечной точки API не было получено ответа, - это если Axios (или хост-система, на которой работает Axios) реализовала тайм-аут, и в течение этого периода не было получено никакого ответа. Итак, не видя больше информации о конкретном запросе, который вы делаете, и конкретном API, кажется, что здесь есть две возможности:

  1. Ваша конечная точка API имеет ошибку и не отправляет ответ при некоторых обстоятельствах.
  2. Конечной точке API требуется много времени для отправки ответа, а библиотека Axios задерживает время до получения ответа.

Вы могли бы значительно увеличить значение тайм-аута для вашего вызова axios, чтобы проверить, происходит ли # 2.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...