【えいちてぃーてぃーぴーつー】

HTTP/2 とは?

最終更新:
💡 一つの接続で、複数のやり取りを多重化する

一つのTCP接続で複数のストリームを扱い、HTTPのメッセージをフレームとして送る通信方式。ヘッダーの圧縮にも対応し、HTTP/1.1での応答順序による待ちを減らせる。

📌 このページのポイント
HTTP/2:応答データを多重化する HTTP/1.1:応答は要求の順に返す パイプラインで要求を先に送っても、応答は順番 C B B A A A クライアント サーバー ← 送信順(右から左) HTTP/2:ストリームごとに分ける 応答のデータフレームを交互に送れる C B C A B A クライアント サーバー ← 送信順(右から左) HPACK:ヘッダー圧縮(本文圧縮とは別) TCPのパケット損失による待ちは残る
一つのTCP接続での送信順を右から左へ読む模式図。A・B・Cは別の要求の応答データ。
ひよこ ひよこ
HTTP/1.1は一つずつしか要求できないの?
ペンギン先生 ペンギン先生
HTTP/1.1にも、応答を待たずに複数の要求を送るパイプラインがあるよ。ただし同じ接続の応答は要求順に返す必要がある。HTTP/2はやり取りをストリームに分け、別の応答のフレームを交互に送れるんだ
ひよこ ひよこ
多重化って、回線が何本もあること?
ペンギン先生 ペンギン先生
一つのTCP接続の中で、複数のストリームを扱うことだよ。ストリームを識別してフレームを送り、受け取る側でそれぞれのやり取りとして扱う。図は応答データの送り方の例で、物理的な回線が何本もあるという意味ではないんだ
ひよこ ひよこ
ヘッダー圧縮なら、画像も小さくなる?
ペンギン先生 ペンギン先生
HPACKが圧縮するのはヘッダーなどの情報だよ。画像や本文の圧縮とは別で、バイナリのフレームにすることも暗号化とは違う。TLSによる暗号化を使う場合も、別の仕組みとして組み合わせるんだ
ひよこ ひよこ
HTTP/2にすれば必ず速くなる?
ペンギン先生 ペンギン先生
応答順序による待ちなどを減らせるけど、必ず速くなるとは限らないよ。TCPではパケット損失によって同じ接続の各ストリームが待つことがある。HTTP/3はQUICを使い、この待ちをストリーム間で分離するように設計されているんだ
ひよこ ひよこ
サーバープッシュは今も必ず使われる?
ペンギン先生 ペンギン先生
HTTP/2の仕様にはあるけど、利用環境が対応し、有効になっている必要があるよ。Chromeでは106から既定で無効化されている。Chromeの開発者ツールではNetworkのProtocol列にh2と表示された要求がHTTP/2で、サイトのすべての要求が同じ方式とは限らないんだ
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「HTTP/2」って出てきたら「一つの接続で複数のHTTPのやり取りを多重化する方式」と思えばだいたいOK!
📖 おまけ:英語の意味
「Hypertext Transfer Protocol Version 2」 = HTTPのバージョン2
💬 HTTPはWebなどで要求と応答をやり取りするプロトコルだよ。HTTP/2はその通信の表し方を変え、フレームとストリームで複数のやり取りを扱うんだ

参考資料

← 用語集にもどる