外は違っても社内はHTTPでやりとり
プロキシがプロトコルも変換

 前回まではプロキシ・サーバーの大枠を紹介した。今回からは,プロキシ・サーバーの動きに焦点を当て,Webアクセス,キャッシュ,Web以外のアクセスの三つの場面について,プロキシのしくみを見ていこう。

Webアクセス
DNSへのアクセスも代行

 プロキシ・サーバーの動きを見る前に,まずはプロキシ・サーバーを使わないときのWebアクセスの流れを把握しておこう。プロキシ・サーバーを利用したときとの違いがはっきりするはずだ。

図3 プロキシ・サーバーを使わないWebアクセスの流れ
WebブラウザのURL入力ボックスにURLを入れると,クライアントがDNSサーバーに目的のWebサーバーのIPアドレスを問い合わせる。求めたIPアドレスを使って,Webサーバーにリクエストを送ると,レスポンスが返ってくる。
 プロキシ・サーバーを使わない通常のWebアクセスは単純だ(図3[拡大表示])。まずは,ユーザーがWebブラウザのURL入力欄に目的のWebページのURLを入力する(1)。するとWebブラウザは,目的のWebサーバーのIPアドレスを調べるためにDNSサーバーへアクセスする(2)。DNSサーバーはその要求に応えてIPアドレスを返答する(3)。あて先WebサーバーのIPアドレスがわかったWebブラウザは,そのあて先に「このWebページがほしい」というリクエストを送る(4)。そうすると,WebサーバーからWebページのデータが入ったレスポンスが返ってくる(5)。

 ここで覚えておきたいのは,DNSサーバーへアクセスしてIPアドレスの検索要求を出しているのは,クライアントだということと,クライアントが送信するIPパケットのあて先は,目的のWebサーバーであるということ。この二つは後ほど説明するプロキシ・サーバー経由のWebアクセスとの比較ポイントになる。

 それから,クライアントが出した「このWebページがほしい」というリクエストについても押さえておこう。このメッセージは,HTTPとして規定されている。HTTPでは,クライアントが送信するリクエストと呼ぶメッセージをWebサーバーが受けとって処理し,その処理結果がレスポンスとして返信される。リクエストやレスポンスの実体は半角英数字で記述されたテキスト・データである。例えば,「このWebページがほしい」というリクエストは,
GET /index.html HTTP/1.1 というメッセージになる。つまり,クライアントは目的のWebサーバーに対して,「/index.htmlというファイルをGETしたい(ほしい)」と,リクエストを出しているのだ。

プロキシがすべてを代行する

図4 プロキシ・サーバーを使ったWebアクセスの流れ
ユーザーがWebブラウザに入力した要求は,プロキシ・サーバーに伝わる。すると,プロキシ・サーバーがDNSサーバーにIPアドレスを問い合わせる。続いて,プロキシ・サーバーは,返答されたIPアドレスを使ってクライアントから接続要求のあったWebサーバーにリクエストを送る。最終的に,プロキシ・サーバーに返ってきたレスポンスをクライアントへ返す。
 では,本題であるプロキシ・サーバーを使ったWebアクセスに移ろう。プロキシ・サーバーはクライアントと目的のWebサーバーの間に位置して代理応答することになる(図4[拡大表示])。

 まずユーザーが,WebブラウザのURL入力欄に目的のWebページのURLを入力するのはプロキシを使わない場合と同じである(1)。入力する内容も変わらない。

 そして次がポイントだ。クライアントはDNSサーバーへアクセスせずに,プロキシ・サーバーへリクエストを送るのである(2)。するとプロキシ・サーバーがDNSサーバーに対してIPアドレスの検索要求を出す(3)。そしてDNSサーバーは検索要求を処理してIPアドレスを返す(4)。

 WebサーバーのIPアドレスがわかったプロキシ・サーバーは,そのあて先に「このWebページがほしい」というリクエストを送る(5)。すると,WebサーバーからWebページのデータが入ったレスポンスがプロキシ・サーバーに返って来る(6)。そして最後にプロキシ・サーバーが,要求元のクライアントへデータを返答する(7)。

あて先をプロキシにHTTPで伝える

 一連の流れで,クライアントがプロキシ・サーバーへリクエストを送る場面(図4の(2))を詳しく見てみよう。

 プロキシ・サーバーを使ったWebアクセスでは,クライアントがDNSサーバーへアクセスせずに,プロキシ・サーバーへリクエストを送った。そのHTTPのリクエストは,

GET http://www.companyA .co.jp/index.html HTTP/1.1

となる。ここでは,プロキシを使わないときのリクエストと違って,「http://www.companyA.co.jp」という要素が入っている。つまり,このリクエストは,クライアントが「www.companyA.co.jpにある/index.htmlというファイルをHTTPでGETしたい(ほしい)」とプロキシ・サーバーに依頼しているのである。プロキシ・サーバーはこれらの要素を見て,クライアントがアクセスしたいWebサーバー名や,要求しているファイル名,アクセスに使うプロトコルを認識しているのである。

 では,なぜこのリクエストは,Webサーバーではなく,プロキシ・サーバーに送られたのか。それは,あらかじめユーザーがWebブラウザに,プロキシ・サーバーを使う設定をしておいたからにほかならない。

 この例では,プロキシ設定のHTTPの項目に,プロキシ・サーバーのアドレス(proxy.companyA.co.jp)とポート番号(8080番)があらかじめ入力されていた。これは,「HTTPを使ってアクセス(Webアクセス)するときには,必ず入力されたアドレスのポート番号にアクセスしなさい」という意味である。