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

Java的HttpURLConnection.connect()抛出ConnectionException的原因及排查

可能诱因

  • Java进程的网络栈配置与Dart进程存在差异,最常见的是IPv4/IPv6优先策略不一致:如果日志系统仅监听IPv4地址,Java默认优先尝试IPv6连接就会被拒绝,Dart默认优先走IPv4的话就能正常连通。
  • JVM层面的代理配置冲突:Java进程可能被全局/环境变量/JVM启动参数注入了HTTP/HTTPS代理,请求日志系统的内网地址时被错误转发到代理,导致连接失败;Dart进程没有继承该代理配置所以不受影响。
  • 端口绑定范围限制:日志系统如果绑定的是127.0.0.1而非0.0.0.0,仅允许本机进程访问的话,若Java后端运行在另一台服务器、Dart后端和日志系统同机,就会出现Dart正常Java失败的情况。
  • TLS版本/加密套件不兼容:如果日志系统开启了HTTPS,且配置的最低TLS版本高于Java默认支持的版本(比如Java 8默认启用TLS 1.2,若日志系统要求TLS 1.3且未向下兼容),初始握手失败也会抛出连接拒绝类错误。
  • 主机名解析差异:两台服务配置的URL如果用的是域名而非IP,Java的DNS缓存策略/解析顺序和Dart不一致,可能解析到了错误的IP地址导致连接失败。

排查方向

  1. 验证网络栈优先级
    给Java进程加启动参数-Djava.net.preferIPv4Stack=true强制走IPv4,重试请求看是否恢复正常。
  2. 检查JVM代理配置
    在Java服务启动时打印系统属性,确认是否存在http.proxyHost/https.proxyHost相关配置:
System.out.println(System.getProperty("http.proxyHost"));
System.out.println(System.getProperty("https.proxyHost"));

也可以直接在请求代码中显式禁用代理:

// 以HttpClient为例
HttpClient client = HttpClient.newBuilder()
    .proxy(ProxySelector.of(null))
    .build();
  1. 核对日志系统监听地址
    在日志系统所在服务器执行netstat -anp | grep [监听端口],确认监听地址是0.0.0.0还是127.0.0.1,如果是后者需要修改日志系统的绑定配置。
  2. 验证HTTPS兼容性
    如果是HTTPS请求,用openssl s_client -connect [日志系统地址:端口]查看支持的TLS版本,再核对Java版本的默认TLS支持范围,必要时升级JDK版本或调整日志系统的TLS配置。
  3. 验证主机名解析结果
    分别在Java服务所在服务器和Dart服务所在服务器执行nslookup [日志系统域名],确认解析得到的IP一致,同时检查Java服务所在服务器的hosts文件是否有错误的静态解析记录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:09:02