前回まで、Java SE 9の実験的API「HTTP/2 Client」について、HTTP/1.1の範囲の機能を紹介してきました。しかしその名称の通り、最も重要な機能と言えるのがHTTP/2のサポートです。今回はHTTP/2に特有の機能を紹介していきます。

 まず、HTTP/2について簡単に触れ、その後にHTTP/2 ClientにおけるHTTP/2関連の機能を紹介します。

HTTP/2とは

 HTTP/2はHTTPの高速化を目的としたプロトコルです。IETFによって2015年2月に承認されました。HTTP/1.1の策定が1997年ですから、18年ぶりのバージョンアップです。

 HTTP/2はもともと米Googleが提唱していた「SPDY」をベースに策定されました。Googleは2016年にSPDYのサポートを終了し、現在はHTTP/2に置き換えています。

 HTTP/2では以下のような高速化技術が導入されています。

  • ストリームを用いた通信の多重化
  • サーバープッシュ
  • ヘッダーの圧縮

 通信の多重化はHTTP/1.1のパイプライン機能でも可能でしたが、実際に使用するには問題が多く、ほとんど使われることはありませんでした。ストリームはパイプラインの問題を解決した新しいプロトコルを採用しています。

 サーバープッシュは、クライアントが要求を行う前にサーバーがリソースを送信する技術です。プッシュされたリソースはキャッシュに保持されますが、クライアントはプッシュされたことは検知しません。クライアントがリソースを要求した時には、すでにそのリソースはダウンロードしてあるので、見かけ上高速化されるのです。双方向通信が必要な用途には、次回紹介するWebSocketを使用します。

 HTTP/1.1ではボディーの圧縮は行われていましたが、HTTP/2ではヘッダーも圧縮されるようになりました。

 HTTP/2 Clientではこれらの機能はすべてサポートしています。このうちサーバープッシュやヘッダーの圧縮に関しては、多くのユーザーは気にする必要はありません。そこで、本記事では多重化について紹介していきます。