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

Flutter应用出现DioError 504网关超时错误,请求技术支持

解决Flutter Dio请求504网关超时问题(Postman正常但应用报错)

可能原因及对应解决方案

1. Dio超时阈值设置过短

Postman默认超时时间通常在30秒以上,但Dio默认的连接/接收超时可能仅10秒左右。如果接口响应时间接近或超过Dio的超时设置,就会触发504错误。

  • 调整Dio的超时参数:
Dio dio = Dio();
dio.options.connectTimeout = const Duration(seconds: 30); // 连接超时时间
dio.options.receiveTimeout = const Duration(seconds: 30); // 数据接收超时时间

2. 请求头/参数与Postman不一致

Postman中的请求头(如User-Agent、Authorization、Content-Type)或请求参数,和应用内Dio发送的请求存在差异,导致网关处理逻辑不同,进而出现超时。

  • 开启Dio日志拦截器,打印完整请求信息:
dio.interceptors.add(LogInterceptor(requestBody: true, responseBody: true));
  • 将打印的请求头、参数与Postman中的配置逐一对比,修正不一致的部分。

3. 网络环境差异

应用运行的设备(模拟器/真机)和Postman所在的网络环境不同,比如设备处于弱网、开启VPN代理,或者网关对不同客户端的限流策略有区别。

  • 将设备切换到和Postman相同的网络(如同一Wi-Fi);
  • 关闭设备上的VPN或代理工具后重新请求。

4. 网关缓存或路由节点问题

网关可能对重复请求有缓存机制,或者Postman的请求分配到了负载较低的路由节点,而应用请求命中了负载过高的节点。

  • 重启应用,若配置了Dio缓存拦截器则清除缓存;
  • 多次发起请求,验证是否为偶发的节点负载问题。

5. HTTPS请求的SSL证书验证问题

部分网关对SSL证书验证严格,Postman默认可能跳过部分验证步骤,但Dio默认会严格验证,导致请求耗时增加最终超时。

  • 测试阶段可临时关闭SSL验证(生产环境禁止):
dio.options.onHttpClientCreate = (HttpClient client) {
  client.badCertificateCallback = (X509Certificate cert, String host, int port) => true;
  return client;
};
  • 生产环境需配置正确的证书链。

控制台错误日志

I/flutter (16822): DioError [DioErrorType.response]: Http status error [504]
I/flutter (16822): Source stack:
I/flutter (16822): #0      DioMixin.fetch (package:dio/src/dio_mixin.dart:488:35)
I/flutter (16822): #1      DioMixin.request (package:dio/src/dio_mixin.dart:483:12)
I/flutter (16822): #2      DioMixin.get (package:dio/src/dio_mixin.dart:61:12)
I/flutter (16822): #3      ApiWrapper.request (package:eoffice/utils/networks/ApiWrapper.dart:66:38)
I/flutter (16822): <asynchronous suspension>
I/flutter (16822): #4      SimpegService.apiRequest (package:eoffice/utils/networks/constans/SimpegService.dart:34:16)
I/flutter (16822): <asynchronous suspension>
I/flutter (16822): #5      LeaveListRepository.fetchResponse (package:eoffice/modules/home/views/widgets/Dashboard/DashboardApp/Leave/LeaveList/repositories/LeaveListRepository.dart:14:9)
I/flutter (16822): <asynchronous suspension>
I/flutter (16822): #6      LeaveListBloc.fetchResponse (package:eoffice/modules/home/views/widgets/Dashboard/DashboardApp/Leave/LeaveList/blocs/LeaveListBloc.dart:33:11)
I/flutter (16822): <asynchronous suspension>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:15:32