HTTP/1.1・HTTP/2・HTTP/3 の違い

目次

HTTP/1.1・HTTP/2・HTTP/3 の違いのまとめ

HTTPはWeb通信で使われるプロトコルであり、バージョンごとに性能や仕組みが進化しています。

項目 HTTP/1.1 HTTP/2 HTTP/3
通信方式 テキスト バイナリ バイナリ
トランスポート TCP TCP QUIC(UDP)
暗号化(HTTPS) 任意(HTTPも可) ほぼ必須(実質HTTPS) 必須(常に暗号化)
TLSバージョン TLS1.0〜1.3(環境依存) 主にTLS1.2以上 TLS1.3のみ(QUICに統合)
ハンドシェイク TCP + TLS(2段階) TCP + TLS(2段階) QUICで統合(高速かつ安全)
多重化 なし あり あり(QUIC側)
ヘッダ圧縮 なし HPACK QPACK
遅延耐性 弱い 強い

HTTP/1.1:従来方式(シンプルだが効率は低い)

HTTP/2:高速化(多重化・圧縮)

HTTP/3:低遅延・高耐障害(QUIC)

HTTP/1.1とは

HTTP/1.1は長年使われてきた標準的なHTTPです。

 

特徴

  • テキストベース(可読性が高い)
  • 1リクエストごとに処理(基本は逐次処理)
  • Keep-AliveによりTCP接続を再利用可能

 

ポイント

HTTP/1.1では、1つのTCP接続で効率よく複数リクエストを処理する仕組みが弱いため、ブラウザ側で複数TCP接続を張ります(※)。

(※)ドメインシャーディング・・・静的リソースを複数のサブドメインに分散し、ブラウザの同時接続数制限を回避して通信を高速化する手法。

パイプライニングは仕様上存在しますが、実運用ではほぼ使われていません

HTTP/2とは

HTTP/2はHTTP/1.1の課題(通信効率)を改善するために登場しました。

 

特徴

  • バイナリプロトコル(高速処理)
  • 1つのTCP接続で複数リクエストを並列処理(多重化)
  • ヘッダ圧縮(HPACK)
  • ストリーム単位での優先度制御

 

多重化(Multiplexing)

1つのTCP接続上で複数リクエストを同時に処理できます。

→HTTP/1.1の接続を増やして対応が不要に近づく

 

ヘッダ圧縮(HPACK)

HTTPヘッダの冗長性を削減し、通信量を削減します。

 

TCPレベルのヘッドオブラインブロッキング

HTTP/2は1本のTCP接続に依存するため、パケットロスが発生するとその接続上のすべてのストリームに影響が出るという性質があります。

 

サーバプッシュについて

HTTP/2にはサーバプッシュという機能がありますが、実運用では扱いが難しく現在のブラウザでは重要度が低下しているため、現在は以下が主流です。

  • preload
  • 103EarlyHints

HTTP/3とは

HTTP/3はHTTP/2の問題を解決するために設計された新しいバージョンです。

 

特徴

  • QUIC(UDPベースのトランスポート)上で動作
  • TCPを使用しない
  • 接続確立が高速(TLS統合)
  • パケットロスに強い

 

QUICとは

QUICはUDPをベースとした新しいトランスポートプロトコルで、ストリーム多重化、暗号化(TLS1.3統合)、低遅延接続を提供します。

HTTP/3はUDP通信ではなくQUIC上で動くHTTPと理解するのが正確です。

 

実務上のメリット

①ヘッドオブラインブロッキングの改善

HTTP/2(TCP)では、1つのパケットロスで全体に影響しますが、HTTP/3(QUIC)では、ストリーム単位で独立しているので他の通信への影響を抑制できます。

②接続確立が高速

TCP+TLSの2段階が不要で、初回接続が高速(0-RTT/1-RTT)です。

③モバイル・不安定回線に強い

パケットロスに強く、IP変更(Wi-Fi→LTE)にも耐性があります。

 

HTTP/2との関係

HTTP/3はHTTP/2に似た設計を持ちますが、完全な後継というより、トランスポート層を置き換えた進化版です。

項目 HTTP/2 HTTP/3
トランスポート TCP QUIC(UDP)
多重化 HTTP層 QUIC層
ヘッダ圧縮 HPACK QPACK

ブラウザでのアクセスがどのHTTPのバージョンか確認する

1.対象サイトを開く

2.F12 で 開発者ツール を開く

3.「Network(ネットワーク)」タブをクリック

4.ページをリロードして通信をキャプチャ

5.リクエスト一覧のヘッダー行を右クリック → Protocol(プロトコル)列を表示

 

 

6.各リクエストのプロトコル列に以下のように表示されます。

http/1.1 → HTTP/1.1
h2 → HTTP/2
h3 → HTTP/3

プロトコルはリクエストごとに異なる場合があります。
同じページでも上記が混在することがあります。

関連の記事

「HTTPリクエスト」と「HTTPレスポンス」とは

△上に戻る