Java OkHttp3 仅使用 Http/1.1 或 Http/2

Java OkHttp3 only use Http/1.1 OR Http/2

正在尝试为 HTTP 请求做一些测试用例。我想区分 HTTP/1.1 和 HTTP/2。为此,我需要知道我从请求中使用了哪个版本。我还想强制请求使用 HTTP/1.1 或 HTTP/2。我正在为 Java 使用 OkHttp3。 这是我的一个简单请求:

Request request = new Request.Builder()
            .url(url)
            .build();

Response response = client.newCall(request).execute();
return response.body().string();

您可以强制请求为HTTP/1.1,仅使用以下代码

new OkHttpClient.Builder().protocols(Arrays.asList(Protocol.HTTP_1_1));

您不能强制 HTTP/2,因为 HTTP/1.1 必须在 protocols 列表中。

但是您可以通过检查响应对象protocol来确认

Request request = new Request.Builder()
        .url("http://publicobject.com/helloworld.txt")
        .build();

Response response = client.newCall(request).execute();

assert(response.protocol() == Protocol.HTTP_2);