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

使用java.net.http.HttpClient调用Rest API时如何保留请求头大小写

如何在Java HttpClient中保留请求头的大小写?

Java 11+ 自带的HttpClient默认会根据使用的HTTP协议版本处理请求头名称:

  • 若使用HTTP/2协议(默认自动协商),客户端会强制将所有请求头名转为小写,符合HTTP/2规范要求
  • 若使用HTTP/1.1协议,客户端会保留你设置的请求头名大小写

你的问题中请求头userID被转为userid,大概率是因为客户端自动使用了HTTP/2协议。要保留请求头大小写,只需强制客户端使用HTTP/1.1协议发送请求即可。

修改后的完整代码

HttpRequest request = HttpRequest.newBuilder()
        .uri(URI.create("https://example.com/xyz"))
        .header("userID", "test_user")
        .header("Content-Type", "application/json")
        .method("POST", HttpRequest.BodyPublishers.ofString("{\n\t\"data\": \"test\",\n\t\"sign\": \"test\"\n}"))
        .build();

HttpResponse<String> response = null;
try {
    // 强制使用HTTP/1.1协议构建HttpClient
    HttpClient httpClient = HttpClient.newBuilder()
            .version(HttpClient.Version.HTTP_1_1)
            .build();
    response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    System.out.println(response.body());
} catch (IOException e) {
    throw new RuntimeException(e);
} catch (InterruptedException e) {
    Thread.currentThread().interrupt(); // 恢复线程中断状态
    throw new RuntimeException(e);
}
System.out.println(response.body());

补充说明

如果服务端必须使用HTTP/2协议,那么无法在客户端保留请求头大小写——因为HTTP/2规范明确要求头名必须是小写形式,此时需要联系服务端修改大小写敏感的校验逻辑,使其符合HTTP协议规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 11:55:28