0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

#0120(2025/05/04)HTTP/1.1とHTTP/2の違い

Posted at

はじめに

本記事はHTTP/1.1とHTTP/2の違いをプロトコルレベルから実装・運用まで深掘りし、設計時・チューニング時に意識すべきポイントを具体的に解説します。


1. コネクション管理とHOLブロッキング

HTTP/1.1

  • デフォルトで1接続=1リクエスト
  • パイプライニングは多くの実装で無効化、並列性は複数TCPコネクションで実現。
  • TLSハンドシェイク×Nで接続オーバーヘッドが発生。

HTTP/2

  • 単一TCP接続内に複数ストリームを多重化。
  • TCPレベルではHOLブロッキングがストリーム間で共有され、パケット損失時の影響範囲に注意。
  • 対策: 長距離やモバイル回線ではTCPプロキシ/QUIC(HTTP/3)も検討。

2. フレーミングとバイナリ化

  • HTTP/1.1はテキストベースで、ヘッダ境界は空行・改行。
  • HTTP/2は9バイトヘッダ+可変長ペイロードのフレームを使用。
  • 設計上の勘所: フレーム分割・マージやバッファ管理を最適化し、メモリ使用量を制御。

3. HPACK(ヘッダ圧縮)のチューニングとセキュリティ

  • 動的・静的テーブル参照で差分圧縮。
  • SETTINGS_HEADER_TABLE_SIZE圧縮率 vs メモリ消費量のトレードオフ。
  • BREACH/CRIME攻撃対策として、過度なテーブルサイズ増大を抑制。
  • APIごとのヘッダパターンを分析し、SETTINGS_MAX_HEADER_LIST_SIZEを最適化。

HPACKは、HTTP/2におけるヘッダー圧縮方式です。HTTP/2で通信する際、ヘッダー情報を効率的に圧縮し、通信量を削減する仕組みです。これにより、Webサイトの読み込み速度を向上させることができます


4. プライオリティとフロー制御

  • PRIORITYフレームでストリームごとの**重み付け(weight)**や依存関係を定義。
  • クライアント・サーバー間で接続単位/ストリーム単位のウィンドウ制御を行い、SETTINGS_INITIAL_WINDOW_SIZEを調整。
  • 注意点: ウィンドウサイズが大きすぎるとメモリ圧迫、小さすぎるとWINDOW_UPDATE頻発によるオーバーヘッド。

5. サーバープッシュの活用と注意点

  • HTML → CSS/JSを先行送信し、RTTを節約可能。
  • 不要プッシュによる帯域浪費やキャッシュミスを防ぐため、キャッシュ状況の確認や用途に応じた制御を実装。
  • PUSH_PROMISEを正しく扱い、クライアントのキャッシュ状態を考慮した設計を。

6. TLS運用とALPNネゴシエーション

  • HTTP/2はほぼHTTPS前提(ALPNでh2を選択)。
  • TLS1.2以上を必須化し、古いバージョンの無効化を徹底。
  • 証明書管理やセッション再開(PSK)を組み合わせることで、接続確立コストを最小化。

7. デバッグ・計測ツール

  • HTTP/1.1: curl, tcpdumpで平文ヘッダ参照。
  • HTTP/2: nghttp, h2load, ブラウザ開発ツールのフレーム単位タイムライン
  • ログレベルDEBUG以上でフレーム送受信ログを取得し、ボトルネック特定

8. HTTP/3移行への布石

  • QUICベースでTCP HOLを解消。
  • HTTP/2のストリーム管理/HPACK/プライオリティ知識はHTTP/3でも活用可能。
  • ステップ: まずHTTP/2で最適化経験を積み、HTTP/3へのスムーズな移行を目指す。

まとめ:意識すべきポイント

  1. HOLの恩恵と限界:多重化×TCPレイヤの特性把握
  2. HPACK設定:圧縮率・メモリ・セキュリティのバランス
  3. 優先度/フロー制御:適切なウィンドウサイズと重み付け
  4. Server Push:帯域効率化とキャッシュ戦略
  5. TLS/ALPN:HTTPS運用と接続コスト低減
  6. デバッグ:フレーム単位の可視化で性能改善

これらを踏まえ、HTTP/2導入時やチューニング時に具体的な数値・ツールを活用し、パフォーマンスと運用性を両立させましょう。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?