HTTP/1.1
HTTPは、長年に渡り機能追加と改良が重ねられてきた。現在はHTTP/1.1が最も普及している。
HTTPキープアライブ
HTTP/1.0以前ではWebブラウザからHTTPリクエストを送信するたびにコネクションを確立し、WebサーバーがHTTPレスポンスを渡した段階でコネクションを閉じるという方法が用いられていた。
この方法では、Webページに画像データが埋め込まれていた場合、画像取得のために再度コネクションを確立する必要があるため、無駄な通信が発生していた。
HTTP/1.1以降では、コネクションを継続して利用する方式となり、この機能をキープアライブと呼ぶ。
HTTPパイプライン
通常はHTTPレスポンスを受け取るまでは、次のHTTPリクエストを送ることはできない。
しかし、HTTP/1.1では、HTTPレスポンスを待つことなく複数のHTTPリクエストを送信することができるHTTPパイプラインと呼ばれる機能がサポートされている。
これにより、複数のHTTPリクエストを短時間で処理できる。
HTTP2
飛躍するデータ量の増加に対応するため2015年に公開されたのがHTTP/2である。
ストリームによる多重化
HTTPパイプラインは「HTTPリクエストの順番通りにHTTPリクエストを帰さなかればならない」という制約があるため、複数のHTTPリクエストが送信されても、ある1つのHTTPレスポンスの処理に時間がかかる場合、それ以降のHTTPレスポンスはその処理を待つ必要があった。
この問題解決のため、HTTP/2では1つのコネクション上に「ストリーム」と呼ばれる仮想的な通信経路を複数形成し、それぞれのストリーム内での独立したやりとりを可能にしている。HTTPレスポンスの待ち状態が発生するということがなくなり、より高速で効率よくデータのやりとりが可能になった。
バイナリ形式の利用
HTTP/1.1以前ではHTTPリクエストやHTTPレスポンスのやりとりをテキスト形式のフォーマットで行ってきた。HTTP/2では、バイナリ形式(コンピュータが扱うためのデータ形式)のフォーマットとなったため、変換処理時間やWebブラウザやWebサバーの負担を軽くできる。
ヘッダー圧縮
HTTPでのやりとりのヘッダー情報において、HTTPレスポンスはWebブラウザの種類など、HTTPリクエストはWebサーバーの除法などが重複する部分が多い。
HTTP/2では重複データの転送を避けるため、HPACKと呼ばれる圧縮方式を利用し、変更があった部分のみを転送している。
サーバープッシュ
HTTP/2では、HTTPリクエスト内容をもとにWebサーバーが必要なファイルを判断し、事前にWebブラウザへ送信することができる。
例えば、HTMLファイル内に画像が埋め込まれていた場合、Webサーバーは画像に対するHTTPリクエストを受け取らなくても、事前に画像データを転送する。