HTTP/2(エイチティーティーピー ニ)とは | 意味や読み方など丁寧でわかりやすい用語解説
HTTP/2(エイチティーティーピー ニ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
HTTP/2 (エイチティーティーピーツー)
英語表記
HTTP/2 (エイチティーティーピー ニ)
用語解説
HTTP/2は、WebサーバーとWebブラウザ間で情報をやり取りするためのプロトコルであるHTTP(Hypertext Transfer Protocol)の主要なバージョンの1つである。これは、1999年に策定されたHTTP/1.1の後継として、Webページの表示速度の向上と通信効率の改善を目的として2015年に標準化された。現代のWebサイトは、テキストだけでなく画像、CSS、JavaScriptなど多数のリソースで構成されており、HTTP/1.1の設計ではこれらのリソースを効率的に取得することが困難になっていた。HTTP/2は、この問題を解決するための新しい仕組みを導入することで、より高速で応答性の高いWeb体験を実現する。その策定にあたっては、Googleが開発したSPDYという実験的なプロトコルが基礎となっている。HTTP/2はHTTP/1.1のセマンティクス、すなわちリクエストメソッド(GET, POSTなど)やステータスコード(200, 404など)、ヘッダの概念は引き継いでおり、既存のWebアプリケーションとの互換性を保ちながら、通信の仕組みのみを改善している点が特徴である。
HTTP/2が解決しようとしたHTTP/1.1の主な課題は、ヘッドオブラインブロッキングとヘッダの冗長性であった。HTTP/1.1では、1つのTCPコネクション上で一度に1つのリクエストしか処理できず、あるリクエストに対するレスポンスが完了するまで後続のリクエストは待たされるというヘッドオブラインブロッキングの問題があった。これを回避するために、ブラウザはサーバーに対して複数のTCPコネクションを同時に確立する手法を取っていたが、コネクションの確立にはコストがかかり、サーバーへの負荷も増大させるため、根本的な解決には至らなかった。また、リクエストやレスポンスに含まれるヘッダ情報はテキスト形式で、毎回似たような内容が繰り返し送信されるため、通信データ量が増加し非効率であった。
これらの課題を解決するため、HTTP/2にはいくつかの重要な新機能が導入された。その中心となるのが、ストリームによる通信の多重化である。HTTP/2では、1つのTCPコネクション上に「ストリーム」と呼ばれる仮想的な双方向の通信路を複数確立する。各リクエストとレスポンスのペアは、それぞれ独立したストリームに割り当てられ、並行してデータを送受信できる。データは「フレーム」という小さな単位に分割され、異なるストリームのフレームを混ぜ合わせて送信することが可能である。受信側では、フレームに含まれるストリームIDを元にデータを組み立て直すため、順番が前後しても問題ない。これにより、1つのリソースの転送が遅れても他のリソースの転送を妨げることがなくなり、HTTP/1.1のヘッドオブラインブロッキングが解消される。
通信データの形式も、テキストベースからバイナリベースのフレーミングに変更された。HTTP/2では、すべての通信データがヘッダ情報を含むHEADERフレームや、データ本体を含むDATAフレームなど、型付けされたバイナリ形式のフレームに分割される。バイナリ形式はテキスト形式に比べてコンピュータによる解釈が高速かつ効率的であり、曖昧さがなくエラーが発生しにくいという利点がある。
ヘッダの冗長性については、HPACKという専用の圧縮方式を導入することで解決した。HPACKは、クライアントとサーバー間で送受信したヘッダ情報をテーブルとして保持し、2回目以降の通信では、以前と同じヘッダはインデックス番号のみを送信することでデータ量を大幅に削減する。これにより、特にCookieなど毎回同じ情報が含まれるリクエストのオーバーヘッドを劇的に減らすことができる。
さらに、サーバープッシュという機能も追加された。これは、クライアントからリクエストされる前に、サーバーが必要になると予測したリソースを先回りしてクライアントに送信する仕組みである。例えば、ブラウザがHTMLファイルをリクエストした際、サーバーはそのHTMLが参照しているCSSファイルやJavaScriptファイルも一緒にプッシュすることで、ブラウザが改めてそれらのファイルをリクエストする手間を省き、ページの表示完了までの時間を短縮できる。
これらの新機能により、HTTP/2はHTTP/1.1に比べて通信効率を大幅に向上させ、Webページの読み込み速度を高速化する。現在、多くのWebサイトやブラウザがHTTP/2に対応しており、現代のWeb通信における標準的なプロトコルとして広く利用されている。