【问题标题】:Java 11 HttpClient does not allow headers starting by colonJava 11 HttpClient 不允许以冒号开头的标头
【发布时间】:2020-02-12 04:58:33
【问题描述】:

我正在尝试发送带有名为“:path”的标头的 POST 请求 (HTTP/2),但看起来 java 11 中的 HttpClient 不允许以冒号开头的标头。

这个标头使用 HTTP/2 应该没问题。

这就是我的代码的样子:

    HttpClient httpClient = HttpClient.newHttpClient();

    HttpRequest mainRequest = HttpRequest.newBuilder()
            .uri(URI.create("xxxx"))
            .setHeader(":method", "POST")
            .setHeader(":path", "xxxxx")
            .POST(HttpRequest.BodyPublishers.ofString(json))
            .build();

    HttpResponse<String> response = null;
    try {
        response = httpClient.send(mainRequest, HttpResponse.BodyHandlers.ofString());
    } catch (Exception e) {
        e.printStackTrace();
    }

我做错了吗?

【问题讨论】:

  • 查看Utils 类的allowedTokenChars

标签: java httpclient http2 java-11 java-http-client


【解决方案1】:

我做错了吗?

是的。伪标头字段由 HttpClient 本身生成。您不需要设置:method:path 标头,HttpClient 会为您完成。

HttpRequest mainRequest = HttpRequest.newBuilder()
        .uri(URI.create("xxxx"))
        .POST(HttpRequest.BodyPublishers.ofString(json))
        .build();

就足够了。 :path:method 如果请求通过 HTTP/2 传输,HttpClient 将根据需要添加。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 2021-11-14
    • 1970-01-01
    • 2019-07-09
    • 2013-10-04
    • 2017-04-01
    • 1970-01-01
    相关资源
    最近更新 更多