「HTTP」の仕組みをおさらいしよう(その3):リトライ! 触って学ぶTCP/IP(4)(3/4 ページ)
ネットワークの基礎を支えるTCP/IPを基本から学び直す本連載。第4回では、HTTPのリクエストやレスポンスのヘッダについて、さらに詳しく解説していきます。実際の通信内容を見ながら、理解を深めましょう。
Keep-Aliveの動作
HTTPの基本的な動作では、「リクエストのたびに接続を確立し、1つのレスポンスを返したら接続を切る」ということを繰り返します。
実際のWebページを見ると、そこには文字以外に複数の要素(写真、画像、音楽など)が含まれており、1つの画面を表示するにはこれら全てをサーバから取得する必要があります。そのため、Webページを見るときには通常、HTTPのリクエストを何度か繰り返して、必要な全ての情報をサーバから取得します。
しかしながら、HTTPのリクエストとレスポンスを1つやりとりするたびに、いちいち接続を準備して切断することを繰り返すのは、明らかな無駄です。
そこで、現在最も多く使われているバージョンのHTTP(HTTP 1.1)では、この無駄を省く仕組みが用意されています。具体的には、特に指定がない限り、レスポンスを返した後に接続を維持し、次のリクエストを送るときは、保持している接続をそのまま再利用してリクエストを送ることができるようになっています。接続を切らずに保持しておくこの動作は、「Keep-Alive」と呼ばれます。
逆に、Keep-Aliveを無効にしたい、つまりレスポンスを返したらすぐに接続を切りたい場合は、リクエストヘッダに次の項目を加えます。
リクエストにこのヘッダが含まれていると、レスポンスを返した後、その接続は切断されます。また、レスポンスヘッダにも、これと同じ項目が加わります。
Keep-Aliveの動作を試してみよう
Keep-Aliveの動作は、プロトコルビュワーを使って観察することができます。
Keep-Aliveが有効であることを確認しよう
図9のように、2つのリクエストをプロトコルビュワーの「送信文字」欄に書いてサーバに送ると、Keep-Aliveが有効であることを簡単に確認できます。1つ目のリクエストでは「/rtcp/p00/」の中のデフォルトドキュメントを取得し、2つ目のリクエストでは「/rtcp/p00/test.html」を取得します。
サーバに接続した後、1行目、2行目と送信していき、3行目(空行)を送信して1つ目のリクエストが終わると、サーバからレスポンスが返ってきます。そのままさらに4行目、5行目、6行目と送信すると、2つ目のリクエストに対するレスポンスがサーバから返ってくることが確認できます。
このように、Keep-Aliveが有効な状態(デフォルト)では、1度接続を作れば、複数のリクエストを続けて処理できます。
なお、Keep-Aliveを使うと接続を切らすに複数のレスポンスを受信するため、プログラムで通信結果を処理するときなどには、各レスポンスの境目を上手に判定する必要があります。
この判定には、レスポンスヘッダに含まれる「Content-Length」の値を使います。この値はメッセージ本体のサイズ(バイト単位)を示していますので、そのサイズ分のデータをメッセージ本体として処理します。そして、それ以降の部分は、後続する別のレスポンスとして取り扱います。こうすることで、レスポンスの切れ目をうまく処理することができます。
Copyright © ITmedia, Inc. All Rights Reserved.