You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Axios返回Network Error但存在响应,无法获取响应对象问题排查

排查Axios抛出Network Error且无法获取响应的问题

1. 优先处理HTTP/2连接重置问题

从curl输出的curl: (18) HTTP/2 stream 1 was reset可以确定,服务器在响应传输过程中重置了HTTP/2流。浏览器控制台能看到部分响应,但Axios会因为连接提前断开判定为Network Error,无法正常解析出response对象。

解决方向:

  • 强制使用HTTP/1.1:在Axios配置中绕过HTTP/2的适配问题:
    const http = require('http');
    const https = require('https');
    const axios = Axios.create({
        baseURL: API_URL,
        httpAgent: new http.Agent({ keepAlive: true }),
        httpsAgent: new https.Agent({ keepAlive: true, rejectUnauthorized: false }),
        adapter: require('axios/lib/adapters/http'), // 强制使用HTTP/1.1适配器
    });
    
  • 服务器端禁用HTTP/2测试:如果是ASP.NET Core服务器,可临时关闭HTTP/2验证问题根源:
    // 在Program.cs中修改Kestrel配置
    builder.WebHost.ConfigureKestrel(options =>
    {
        options.ListenAnyIP(7064, listenOptions =>
        {
            listenOptions.UseHttps();
            listenOptions.Protocols = HttpProtocols.Http1; // 仅启用HTTP/1.1
        });
    });
    

2. 检查CORS配置的生效逻辑

当前CORS策略看似正确,但需确认:

  • 中间件顺序是否正确:必须在UseRouting之后、UseAuthorization之前添加app.UseCors("AllowAll");,否则策略不会生效。
  • 显式声明允许的自定义头:虽然配置了AllowAnyHeader(),但针对Authorization这类自定义头,可显式声明避免兼容性问题:
    builder.WithOrigins("http://localhost:3000")
           .AllowAnyMethod()
           .AllowHeaders("Authorization", "Content-Type", "Accept")
           .AllowCredentials();
    

3. 验证Axios错误捕获逻辑

确保错误处理代码能区分不同类型的错误,避免遗漏细节:

try {
  const response = await axios.post('/Auth/login', { userName: 'manager', password: 'string' });
} catch (error) {
  console.error('完整错误详情:', error);
  if (error.response) {
    // HTTP状态码错误(4xx/5xx)
    console.log('响应数据:', error.response.data);
    console.log('状态码:', error.response.status);
  } else if (error.request) {
    // 请求已发送但无响应(Network Error场景)
    console.log('请求对象:', error.request);
  } else {
    // 请求配置阶段出错
    console.log('错误原因:', error.message);
  }
}

4. 本地HTTPS证书校验问题

由于请求目标是https://localhost:7064,自签名证书可能导致连接异常:

  • 本地开发可临时关闭证书校验(生产环境绝对禁止):
    const https = require('https');
    const axios = Axios.create({
        baseURL: API_URL,
        httpsAgent: new https.Agent({ rejectUnauthorized: false })
    });
    
  • 或者将本地自签名证书导入浏览器信任列表,彻底解决证书信任问题。

内容的提问来源于stack exchange,提问作者ndak0ta

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 22:42:03