原文はこちら。
The original article was written by Ana-Maria Mihalceanu (Senior Developer Advocate, Oracle).
https://inside.java/2025/10/30/quality-heads-up/
OpenJDK Quality Groupは、リリースの全体的な品質向上の手段としてOpenJDKビルドを使ってのFOSSプロジェクトのテストを推進しています。
Quality Outreach
https://wiki.openjdk.java.net/display/quality/Quality+Outreach
このHeads upは、関係するプロジェクトに送られる定期的なコミュニケーションの一部です。このプログラムの詳細と参加方法については、上記wikiをご覧ください。
The quality-discuss Archives
https://mail.openjdk.org/pipermail/quality-discuss/
HTTP/3 Support in HttpClient
java.net.http.HttpClient APIを使うと、Javaアプリケーションが再利用可能なHTTPクライアントインスタンスを作成し、HTTPリクエストを構築し、同期または非同期でレスポンスを処理できます。JDK 11以降、HttpClientまたはHttpRequestレベルで、HTTP/1.1やHTTP/2といった、優先するHTTPプロトコルバージョンを設定できます。
JEP 517により、JDK 26でHTTP/3(HttpClient.Version.HTTP_3)のサポートが導入され、アプリケーションがリクエストに対してHTTP/3を優先または強制できるようになりました。
JEP 517: HTTP/3 for the HTTP Client API
https://openjdk.org/jeps/517
HTTP/3はプロトコルレベルではHTTP/2と同様の機能を提供しますが、主要な違いは、HTTP/2がTCP上で動作するのに対し、HTTP/3はUDPを使用したQUICプロトコル上で動作する点です。以下は、HTTP/3を優先または強制するコードスニペットです。
// prefer HTTP/3
HttpClient client = HttpClient.newBuilder()
.version(HttpClient.Version.HTTP_3)
.build();
// if target server support HTTP/3, add this to enforce it
HttpRequest req = HttpRequest.newBuilder()
.uri(new URI("https://www.google.com/"))
.setOption(HttpOption.H3_DISCOVERY, Http3DiscoveryMode.HTTP_3_URI_ONLY)
.build();
HttpResponse<String> resp = client.send(req, BodyHandlers.ofString(StandardCharsets.UTF_8));
System.out.println("status code: " + resp.statusCode() + " HTTP protocol version: " + resp.version());
HTTP/3を設定しても利用できない場合、クライアントは自動的にHTTP/2またはHTTP/1.1にダウングレード(フォールバック)します。HTTP/3を厳密に要求するように設定した場合、試行に失敗するとダウングレードではなく例外が発生します。
ただし、HTTP/3を優先バージョンとして設定しても、その使用が保証されるわけではありません。クライアントが事前にそのサーバーでHTTP/3をサポートしているかどうか知り得ないためです。サーバーへの最初のリクエストでは、クライアントはTCP(HTTP/2)とUDP(HTTP/3)の両方の接続を試行し、最初に成功したものを使用します。時間の経過とともに、HttpClientはAlt-Svcメカニズム(RFC 7838に基づくHTTP Alternative Services標準)を使用して、サーバーがサポートするHTTPバージョンを「学習」できるようになります。
RFC 7838: RFC 7838: HTTP Alternative Services
https://datatracker.ietf.org/doc/html/rfc7838
Alt-Svcをサポートするサーバーは、HTTP/3などの代替プロトコルを広告します。これにより、そのサーバーへの後続のリクエストは、サポートされている場合にHTTP/3を使用できるようになります。このメカニズムの詳細については、以下の記事をご参照ください。
HTTP/3 Support in JDK 26
https://inside.java/2025/10/22/http3-support/
https://logico-jp.dev/2025/11/01/http-3-support-in-jdk-26/
Call to Action
HTTPクライアントAPIの強化はシンプルに見えますが、QUIC上にHTTP/3をサポートする実装は、JDKチームによる数年にわたる専念した開発努力の成果です。この実装はまだ新しい段階ですので、Java 26 Early Accessビルドをダウンロードして本機能をお試しいただき、net-dev OpenJDKメーリングリスト(登録が必要です)でフィードバックをお寄せくださいますようお願い申し上げます。
OpenJDK JDK 26 Early-Access Builds
https://jdk.java.net/26/
net-dev — Technical discussion about the development of the networking part of the the core libraries
https://mail.openjdk.org/mailman/listinfo/net-dev