現在使われているHTTPプロトコルには、複数のバージョンがあります。HTTP/1.1、HTTP/2、HTTP/3 です。多くのソフトウェアがそうであるように、新しいHTTPの各バージョンは、前のバージョンの機能を基に構築されています。
HTTP/1.1
1997年にリリースされたHTTP/1.1は、HTTP/1.0の初期バージョンからわずか1年後、接続の持続性という考え方を導入し、閉じるよう指示があるまで接続を開いたままにするものでした。以前は、1つのコネクションにつき1つのリクエストしか許可されませんでした。コネクション・パーシステンスは、サーバーが多すぎるコネクションの問題を回避するのに役立ちます。また、安全な (HTTPS) 環境では、1 回の SSL ハンドシェイクで十分な場合に、複数の SSL ハンドシェイクによるオーバーヘッドを回避することができます。
インターネットの半分以上がまだHTTP/1.1を使用していますが、徐々にHTTP/2へと移行しつつあります。
HTTP/2
HTTPの新バージョンが登場するまでには20年近くを要した。2015年、HTTP/2は、Googleが開発した実験的なプロトコルであるSPDYから派生しました。他の重要な機能(大幅に改善されたヘッダー圧縮など)の中で、HTTP/2は、各接続がストリームを介して複数の同時リクエストを処理する機能を導入しました。ストリームはさらにフレームに分解され、その集合がサーバーから1つのパケットで送信され、クライアント側で再集合される。複数の同時リクエストをサポートすることで、HTTP/2はクライアントのネットワークリソースをより少なく使用することができます。これにより、サーバー側の混雑を緩和することができます。
2020年2月現在、上位1000万件のウェブサイトの43%がHTTP/2を使用しており、利用は拡大中です。
HTTP/3
HTTP/3の起源は、HTTP/2をUDPで暗号化して転送することで改善しようとしたGoogleの取り組み、QUICにある。もともと「HTTP over QUIC」と呼ばれていたHTTP/3は、現在もIETFで定義が進められています。HTTP/3は、TCPをUDPに置き換えたものです。UDPはTCPほど多くのルールを持っておらず、トランスポート層では便利ですが、アプリケーション層では対応しないと難点が生じます。そこでHTTP/3では、効果的で安全な通信に必要な、不足しているTCPの機能の一部を実装しています。すべてのTCPベースのプロトコルに存在するヘッドオブラインブロッキングの問題は、UDPとHTTP/3ではそれほど問題ではありません。
2020年2月現在、上位1000万サイトのうち4%強がHTTP/3を使用していますが、この数はプロトコルが定義されるにつれて増加すると予想されます。
バージョン比較
HTTP/1.1 | HTTP/2 | HTTP/3 | |
---|---|---|---|
リリース | 1997 | 2015 | 2018 |
主な新機能 | 長さが不明なレスポンスに対して持続的な接続を可能にするため、chunkedエンコードを追加。 | ヘッダー圧縮による仮想同時ストリームを追加。 | TCPトランスポートをUDPトランスポートに置き換え。 |
接続処理 | 順次、1件ずつリクエスト | 優先順位をつけて、一度に複数の依頼をすることがある | 優先順位をつけて、一度に複数の依頼をすることがある |
ヘッダー圧縮 | (無し) | HPACK | QPACK |
プロトコルタイプ | テキスト | バイナリ | バイナリ |
Server Push | 不可 | 可 | 可 |
HTTPS | 可能だが、必須ではない | 推奨されるが必須ではない | 必須 |
Transport Layer | TCP | TCP | UDP |
普及度 | 現在一般的に使われている | 利用拡大中、2020年2月時点で43% | まだ実験段階、2020年2月時点で4.1%が使用 |