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
相关产品推荐
相关产品推荐

