Java 11 HttpClient不允许以冒号开头的标头

问题描述 投票:0回答:1

我正在尝试发送带有名为“: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();
    }

我做错什么了吗?

java httpclient http2 java-11 java-http-client
1个回答
4
投票

我做错什么了吗?

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

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

就足够了。如果请求是通过HTTP / 2传输的,则HttpClient将适当地添加:path:method

© www.soinside.com 2019 - 2024. All rights reserved.