HTTPキープアライブ(エイチティーティーピーキープアライブ)とは | 意味や読み方など丁寧でわかりやすい用語解説
HTTPキープアライブ(エイチティーティーピーキープアライブ)の意味や読み方など、初心者にもわかりやすいように丁寧に解説しています。
読み方
日本語表記
HTTPキープアライブ (エイチティーティーピーキープアライブ)
英語表記
HTTP Keep-Alive (エイチティーティーピーキープアライブ)
用語解説
HTTPキープアライブは、クライアントとサーバーの間で確立されたTCP接続を、複数のHTTPリクエストとレスポンスにわたって再利用する技術である。この機能は、ウェブページの読み込み速度を向上させ、ネットワークやサーバーのリソース消費を効率化するために非常に重要である。特にHTTP/1.1ではデフォルトでこの機能が有効となっており、現代のウェブ通信において不可欠な要素となっている。
HTTPの初期バージョンであるHTTP/1.0では、一つのHTTPリクエストを送るたびに、クライアントとサーバーの間で新しいTCP接続を確立し、レスポンスを受け取るとその接続を切断するのが基本動作であった。TCP接続の確立には、両者間で「3ウェイハンドシェイク」と呼ばれる3つのパケット交換が必要であり、切断には「4ウェイハンドシェイク」と呼ばれる4つのパケット交換が必要となる。これらのパケット交換は、それぞれネットワークの往復遅延時間(RTT)に依存するため、無視できないほどの時間コストが発生する。現代のウェブページは、HTMLファイルだけでなく、多数の画像、スタイルシート、JavaScriptファイル、フォントなど、数百に及ぶ可能性のある多数のオブジェクトで構成されている。これらのオブジェクトの一つ一つに対して個別のTCP接続の確立と切断が繰り返されると、合計の接続オーバーヘッドが膨大になり、ページの表示速度が著しく低下し、ユーザーエクスペリエンスを損なうことになる。また、サーバー側でも、リクエストごとに新しい接続を処理し、終了させるためのCPUやメモリリソースが余計に消費されるという問題があった。
このような非効率性を解消するために導入されたのがHTTPキープアライブである。キープアライブが有効な場合、クライアントがサーバーに対して最初のHTTPリクエストを送信し、サーバーがそのレスポンスを返した後も、TCP接続をすぐに切断せず、一定時間維持する。この維持された接続を「パーシステントコネクション(持続的な接続)」と呼ぶ。クライアントは、ウェブページを構成する次のオブジェクト(例えば、HTMLファイルに埋め込まれた画像)を取得する際に、新しくTCP接続を確立する代わりに、既に開いているこの持続的なTCP接続を再利用して次のHTTPリクエストを送信できる。サーバーも、同じ接続を通して次のレスポンスを返す。このプロセスが、接続がタイムアウトするか、いずれかの終端が接続を切断するまで繰り返される。
具体的に、HTTP/1.0でキープアライブを使用するには、クライアントがHTTPリクエストヘッダに Connection: keep-alive を含めてサーバーに送信する必要がある。サーバーがその機能に対応しており、接続を維持する意思がある場合、レスポンスヘッダにも同様に Connection: keep-alive を含めて返信する。両者がこのヘッダを交換することで、キープアライブ接続が確立される。一方、HTTP/1.1では、キープアライブがデフォルトの動作となったため、明示的に Connection: close ヘッダが指定されない限り、接続は持続されるものとして扱われる。サーバーは、通常、設定された一定のタイムアウト期間(例えば、5秒や10秒など)内に次のリクエストが来なかった場合、そのTCP接続を自動的に切断する。これにより、アイドル状態の接続がサーバーのリソースを無駄に占有し続けることを防ぐ。
HTTPキープアライブの主なメリットは多岐にわたる。まず、TCP接続の確立と切断にかかる時間的オーバーヘッドが大幅に削減されることで、ウェブページの読み込み時間が短縮される。これは特に、レイテンシ(通信遅延)が大きい環境で顕著な効果を発揮する。次に、TCPのスロースタート機能の恩恵を最大限に活用できる。TCP接続は初期段階では通信速度を抑え、徐々に速度を上げていく(輻輳ウィンドウを広げていく)が、キープアライブによって接続が維持されれば、毎回このスロースタートフェーズを繰り返す必要がなくなり、より効率的にデータを転送できる。また、一度確立されたTCP接続は、輻輳ウィンドウが拡大されることで一度に送信できるデータ量が増加するため、データスループットの向上にも寄与する。さらに、サーバー側の観点からは、接続の確立と切断に関連する処理負荷が軽減されるため、サーバーのCPUやメモリの消費が抑えられ、より多くのクライアントからのリクエストを効率的に処理できるようになる。
ただし、キープアライブにも注意すべき点がある。サーバーが接続を維持し続けることにはリソースの消費が伴うため、キープアライブタイムアウトの適切な設定が重要である。あまりにもタイムアウトが短いとキープアライブのメリットが薄れ、逆に長すぎると、アクティブではない多数のアイドル状態の接続がサーバーのリソースを占有し続け、新たな接続を受け入れられなくなる「接続枯渇」を引き起こす可能性がある。このため、ウェブサーバーソフトウェア(ApacheやNginxなど)では、このタイムアウト値を細かく設定できる機能が提供されており、ウェブサイトの性質や予想されるアクセスパターンに基づいて最適化する必要がある。また、HTTP/1.1のキープアライブでは、単一の接続上で複数のリクエストを順次送信する「パイプライン処理」という概念も存在するが、これは実装の複雑さや、前のリクエストの完了を待つ必要がある「ヘッドオブラインブロッキング」の問題から、広く普及しているとは言えない。より高度な多重化と効率化は、HTTP/2やHTTP/3といった新しいHTTPバージョンで実現されているが、HTTPキープアライブはその進化の基礎を築いた重要な技術である。システムエンジニアとして、ウェブ通信の基盤を理解する上で、このキープアライブの概念とその影響を把握することは不可欠と言える。