HTTP请求被发送但没有收到响应的情况有哪些?

5

我正在使用axios进行HTTP请求,但是出现了错误。以下是来自axios文档关于处理错误的代码片段

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 的值为 true,这意味着(根据文档)已经发出了请求但未收到响应。我的问题是,可能是什么原因导致这种情况?有哪些情况会发出请求但未收到响应?
谢谢

我的第一反应是服务器没有响应。如果它在您的控制下,请检查是否配置错误或终端逻辑是否存在错误。 - VLAZ
很不幸,这不在我的控制范围内,我正在与另一家公司提供的API进行交互。 - Muhammad Saqib
2个回答

2

这通常有两个原因:

1. OPTIONS请求失败

根据我的实践,主要原因有:

  • 服务器在OPTIONS请求中检查授权

  • 服务器发送错误的头信息

  • 服务器进行了一些重定向操作

更多关于OPTIONS请求的信息

2. 网络问题

我在许多具有大量防火墙的企业网络中看到过这种情况。如果没有办法解决网络问题,则通常采用积极的重试。

Original Answer翻译成“最初的回答”

if (err && err.request && !err.response && navigator.onLine !== false) {
  // try again ...
}

0

如果从API端点没有返回响应,你唯一能得到一个.catch()的方式是Axios(或者运行Axios的主机系统)实现了超时,并且在该超时期间未收到响应。因此,如果没有看到更多关于你正在进行的特定请求和特定API的信息,似乎有两种可能性:

  1. 你的API端点存在漏洞,在某些情况下无法发送响应。
  2. 你的API端点花费了很长时间才发送响应,而Axios库在响应到达之前超时了。

你可以显著增加axios调用的超时值来测试第二种情况是否发生。


我和楼主有同样的问题,但我的情况下我可以访问服务器日志。这些日志显示GET请求已成功完成。此外,超时错误会被明确抛出(可以通过error.code捕获)。所以我认为这些覆盖了你的第1和第2项。对于其他可能的根本原因有什么想法吗?我很困惑。 - Chad Kruse
1
@ChadKruse - 我建议你发布自己的问题,包括你的具体代码、日志和调试信息。每种情况都是不同的。我们需要看到你的具体细节。 - jfriend00

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接