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

Java发起HTTP请求报HTTP/1.1 header parser received no bytes如何解决

问题排查与修复方案

该错误本质是客户端发送请求后,服务端直接断开了连接,没有返回任何HTTP响应头或内容。你可以按照以下步骤排查修改:

1. 先确认服务端状态

  • 首先检查本地8000端口的服务是否正常运行:可以用curl http://localhost:8000/get -H "code: 测试值"手动发起请求,确认是否有正常返回
  • 确认服务端是否修改了配置:比如是否切换为HTTPS协议、端口变更、接口路径调整、新增了鉴权规则直接拦截断连
  • 确认服务端是否会返回204(无内容)状态码的响应,Java 11早期版本的HttpClient对204响应的处理存在已知bug,会触发该报错

2. 代码层面修改点

2.1 新增HttpClient超时配置

原代码没有配置超时,连接挂起后被服务端主动断连很容易触发该报错,修改初始化逻辑:

// 需导入java.time.Duration包
HttpClient client = HttpClient.newBuilder()
        // 连接超时
        .connectTimeout(Duration.ofSeconds(10))
        // 全流程请求响应超时
        .requestTimeout(Duration.ofSeconds(30))
        .build();

2.2 显式指定HTTP协议版本

HttpClient默认会优先尝试HTTP/2协议,如果服务端不支持HTTP/2,协商失败的部分场景会触发该报错,可强制指定用HTTP/1.1:

HttpRequest request = HttpRequest.newBuilder()
        .uri(new URI("http://localhost:8000/get"))
        .header("code", Integer.toString(requestcode))
        // 强制使用HTTP 1.1协议
        .version(HttpClient.Version.HTTP_1_1)
        .GET()
        .build();

2.3 新增异常重试逻辑

针对偶发的服务端抖动导致的断连,增加重试逻辑提升稳定性:

public static String request(int requestcode) throws URISyntaxException, IOException, InterruptedException{
    HttpClient client = HttpClient.newBuilder()
            .connectTimeout(Duration.ofSeconds(10))
            .requestTimeout(Duration.ofSeconds(30))
            .build();
    HttpRequest request = HttpRequest.newBuilder()
            .uri(new URI("http://localhost:8000/get"))
            .header("code", Integer.toString(requestcode))
            .version(HttpClient.Version.HTTP_1_1)
            .GET()
            .build();
    // 最多重试3次
    int retryCount = 3;
    while (retryCount > 0) {
        try {
            HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
            return response.body();
        } catch (IOException e) {
            retryCount--;
            if (retryCount == 0) {
                throw e;
            }
            // 重试间隔1秒
            Thread.sleep(1000);
        }
    }
    return null;
}

3. 其他排查方向

  • 如果开启了代理、VPN,先关闭再测试,本地回环请求走代理容易出现连接异常
  • 检查防火墙规则是否拦截了Java进程访问8000端口的请求
  • 如果你使用的是Java 11早期版本,建议升级到Java 11.0.14+或者更高的LTS版本,早期版本的HttpClient存在多个连接处理相关的已知bug

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 09:36:05