【えいちてぃーてぃーぴーつー・えいちてぃーてぃーぴーすりー】

HTTP/2 / HTTP/3 とは?

最終更新:
💡 HTTP/2はTCPで多重化、HTTP/3はQUICで多重化

Webの通信プロトコルHTTPのバージョン。HTTP/2はTCP上で通信を多重化し、HTTP/3はUDP上のQUICを使う。どちらも効率化を図るが、表示速度の改善幅は回線や実装、ページの構成に依存する。

📌 このページのポイント
多重化と、データを待つ範囲 HTTP/1.1 TCP 応答は順序どおり 先が遅いと待つ HTTP/2 TCP 要求・応答を多重化 TCPの欠落で待つ HTTP/3 QUIC / UDP ストリームを多重化 他の流れは進める 応答A 待ち 応答B 待ち ストリームA 欠落 ストリームB 待ち ストリームA 欠落 ストリームB HTTP/2はHTTPの多重化、HTTP/3はQUICを利用 QUICでも回線の帯域などは共有する
HTTP/1.1は接続を再利用でき、パイプライニングも仕様上可能だが応答の順序を守る。HTTP/2は多重化してもTCPの欠落で別の流れが待たされうる。HTTP/3はQUICでストリーム間のその影響を抑える。図は仕組みの比較で、性能の実測値や「必ず最速」という意味ではない。
ひよこ ひよこ
HTTP/1.1の何が問題だったの?
ペンギン先生 ペンギン先生
HTTP/1.1も接続を再利用できるので、画像10枚に必ず10本の接続が必要なわけではないよ。ただしパイプライニングで要求を続けて送っても、応答は要求と同じ順序で返す。先の応答が遅いと後ろも待つんだ。HTTP/2は複数の要求・応答をストリームに分け、同じ接続でデータを交互に運べるよ。
ひよこ ひよこ
HTTP/2なら待ちが全部なくなるの?
ペンギン先生 ペンギン先生
TCPの待ちは残るよ。HTTP/2の下でTCPがデータの順序をそろえるので、途中のデータが失われると、別のストリームの受け渡しも待たされうる。HTTPの層での多重化と、TCPの層での待ちは分けて考えよう。
ひよこ ひよこ
HTTP/3のQUICって何が違うの?
ペンギン先生 ペンギン先生
QUICはUDP上で動き、暗号化や再送、ストリーム内の順序制御を備える通信プロトコルだよ。あるストリームでデータが欠けても、別のストリームのデータは進められる。ただし回線の帯域などは共有するので、どんな待ちや影響もなくなるという意味ではないんだ。
ひよこ ひよこ
0-RTTなら、初めての接続でもすぐ通信できる?
ペンギン先生 ペンギン先生
0-RTTは、以前の接続で得た情報を使って、ハンドシェイク完了前にデータを送る仕組みだよ。サーバーが許可するなどの条件があり、初回から使えるわけではない。送ったデータが再実行されるリプレイの危険もあるので、扱ってよい要求を制限する必要があるんだ。
ひよこ ひよこ
自分のサイトで有効にすれば、必ず速くなるの?
ペンギン先生 ペンギン先生
改善の余地はあるけど、速度は回線やサーバー、ページの構成にも左右されるよ。クライアントとサーバーの対応を確認し、実際に使われたバージョンと応答時間を測ろう。「小さいファイルならいくら増やしても平気」と考えず、転送量や処理時間も見直すんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「HTTP/2・HTTP/3」って出てきたら「複数のWeb通信を効率よく扱うHTTPのバージョン」と思えばだいたいOK!
📖 おまけ:英語の意味
「Hypertext Transfer Protocol version 2/3」 = ハイパーテキスト転送プロトコル バージョン2/3
💬 HTTPはWebで要求と応答を交わす通信の取り決め。2と3はそのバージョン番号だよ

参考資料

← 用語集にもどる