JEP 517 : HTTP/3 for the HTTP Client API

blog1.mammb.com


HTTP Client API

JDK 11 で導入された HTTP クライアント API(JEP 321: HTTP Client API) は HTTP/1.1 と HTTP/2 をサポートしています(デフォルトでは HTTP/2 を優先し、対象サーバーが HTTP/2 をサポートしていない場合は、透過的に HTTP/1.1 にダウングレードする)。

HTTP クライアント API は以下のように使用します。

var client = HttpClient.newHttpClient();
var request = HttpRequest.newBuilder(URI.create("https://openjdk.org/"))
                         .GET().build();
var response = client.send(request, HttpResponse.BodyHandlers.ofString());
assert response.statusCode() == 200;
String htmlText = response.body();

詳細は以下を参照してください。

blog1.mammb.com

JDK 26 で、HTTPクライアント API に HTTP/3 サポートが追加されます。


HTTP/3 サポート

HTTP/3 は、HTTP/2 や HTTP/1.1 ほど広く導入されていないため、HTTP/3 はデフォルトのプロトコルバージョンにはなっていません。

以下のように明示的に優先プロトコルバージョンを指定します。

var client = HttpClient.newBuilder()
                       .version(HttpClient.Version.HTTP_3)
                       .build();

個々のリクエスト単位で指定することもできます。

var request = HttpRequest.newBuilder(URI.create("https://openjdk.org/"))
                         .version(HttpClient.Version.HTTP_3)
                         .GET().build();

ターゲットサーバーがHTTP/3をサポートしていない場合、リクエストはデフォルトで透過的にHTTP/2、あるいは必要に応じてHTTP/1.1にダウングレードされます。