図2は本実施例におけるネットワーク構成を表す図である。
クライアント(11)と同一のLAN(13)内にクライアント側プロキシ(12)を設置し、クライアント側プロキシ(12)がWAN(14)との通信を行う。同様に、サーバ(16)と同一のLAN(17)内にサーバ側プロキシ(15)を設置し、サーバ側プロキシ(15)がWANとの通信を行う。クライアント側プロキシ(12)とサーバ側プロキシ(15)が協調して動作することにより、LANに比べて遅延の大きなWANでも性能劣化を抑えて通信を行うことを可能とする。
本実施例では、クライアント側プロキシ(12)とサーバ側プロキシ(15)が協調して動作するシステムを説明するが、クライアント側プロキシ(12)あるいはサーバプロキシ(15)が他方のプロキシの動作を兼ねて、他方の処理を省略するプロキシシステムであってもよい。
本発明の第一の実施例における通信シーケンスを図1に示す。図1では通信にかかわる、少なくとも一以上のクライアント(11)、クライアント側プロキシ(12)、サーバ側プロキシ(15)、およびサーバ(16)のシーケンスを示している。
クライアントがサーバ上のフォルダにアクセスする際、まず、クライアントは、そのフォルダに対してPROPFINDというリクエスト(101)を発行する。このリクエストは、クライアント側プロキシ(12)で受信され、サーバ側プロキシ(15)へとWANを介してを転送される(111)。
サーバ側プロキシ(15)は、PROPFINDを受信すると、サーバ(16)へさらに転送する(121)。PROPFINDを受信したサーバ(16)はそれに対するレスポンスを生成し、クライアントに向けてWAN側へ返送する(122)。このレスポンスにはフォルダ内のファイル一覧が含まれる。同レスポンスはサーバ側プロキシ(15)でクライアント側プロキシ(12)へ転送され(112)、サーバ側プロキシ(15)は、PROPFINDに対するレスポンスを解析し、フォルダ内のファイル一覧を取得する。さらにクライアント側プロキシ(12)でクライアント(11)へ転送される(102)。クライアント側プロキシ(12)でも同様にこのレスポンスを解析し、ファイル一覧を取得する。クライアント(11)はクライアント側プロキシ(12)およびサーバ側プロキシ(15)とは、別にこのレスポンスを解析してファイル一覧を取得する。
ファイル一覧を取得したクライアント(11)は、各ファイルに対して順にリクエストを送信する。クライアント(11)から送信された最初のファイルに対するリクエスト(103)は、クライアント側プロキシ(12)によって転送され(113)、サーバ側プロキシ(15)によって転送されて(123)サーバ(16)によって受信される。サーバ(16)はリクエスト(123)に対するレスポンスとしてファイルを送信する(124)。
まず、サーバ側プロキシ(15)の動作を説明する。レスポンス(124)を受信したサーバ側プロキシ(15)はこれをクライアント側プロキシ(12)へ転送する(114)。同時に、サーバ側プロキシ(15)はファイル一覧中の次のファイルに対するリクエストを、クライアント(11)に代わってサーバ(16)に送信する(125)。サーバ(16)はこれに対するレスポンスとしてファイルを送信する(126)。該当ファイル(ファイル一覧のうちいずれか一のファイル)を受信したサーバ側プロキシ(15)は、このファイルをクライアント側プロキシ(12)へ転送(115)するとともに、ファイル一覧に次のファイルがあればそれに対するリクエストを送信する(127)。サーバ側プロキシ(15)が同リクエストに対するレスポンスを受信(128)するとこれをクライアント側プロキシ(12)へ転送する(116)。サーバ側プロキシ(15)は、ファイル一覧に次のファイルがないので、ファイル一覧を破棄して動作を完了する。
次に、クライアント側プロキシ(12)の動作を説明する。クライアント側プロキシ(12)はファイル1のレスポンスを受信(114)し、ファイル1を取得すると、ファイル1をクライアント(11)へ転送する(104)。クライアント(11)はファイル2に対するリクエストを送信する(105)。一方でファイル2のレスポンスはサーバ側プロキシ(15)より送信されるされる(115)ので、クラアント側プロキシ(12)は、ファイル2に対するリクエストとレスポンスがそろった段階で、クライアント(11)に対してレスポンスを送信する(106)。同様の動作をファイル一覧中の全てのファイルに対して繰り返し(107,116,108)、ファイル一覧を破棄して動作を完了する。
上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
以上により、「PROPFIND」に対するレスポンスに含まれる「207 Multi−Status」に該当するファイルの指定を受けたの契機にサーバ側プロキシ15が、「207 Multi−Status」に対応する複数ファイルの読み出しを実行し、クライアント側プロキシ12に「200 OK」により、それぞれファイル1−3を送る例を示した。
図3はクライアント側プロキシ(12)の内部構成を表す図である。サーバ側プロキシ(12)は、クライアント11とサーバ16の間の通信を仲介し、パケットを送受信する通信装置であって、クライアント11とWANの間にあるのが一例である。または、クライアント側の局所ネットワークのゲートウェイ装置であってもよい。クライアントは、例えば情報処理装置、無線情報処理端末である。局所ネットワークは、有線、無線少なくともいずれかで構成されてもよい。
LAN側コネクション管理部(301)はクライアント(11)との通信を行う。クライアント(11)からのリクエストはリクエスト判定部(302)にて、リクエストを送信したクライアント(11)が識別される。また、そのリクエストがPROPFINDやGETなど、プリフェッチ動作の契機となるものかどうかが判定される。
プリフェッチ動作中でないとき、受信したリクエストはそのままリクエスト送信部(305)に送られ、サーバ側プロキシ(15)へ送信される。プリフェッチ動作中はリクエストは一旦データ管理部(304)に登録される。
データ管理部(304)はIPアドレスで識別されるクライアント(11)ごとにテーブルを持ち、リクエスト・レスポンスの状態とそのデータを管理する。例えばクライアントが3台あれば3つのテーブル(311〜313)を持つ。リクエストを受信すればそのパス名をキーとしてテーブルを検索して、リクエスト受信済みのフラグを立てる。またプリフェッチされたレスポンスを受信すればレスポンス受信済みのフラグを立てる。テーブルのエントリは定期的に調べられ、リクエスト受信済みかつレスポンス受信済みであれば、レスポンスをレスポンス送信部(303)を介して、クライアントへ送信する。リクエスト受信時にレスポンスが登録されていなければ、リクエストをリクエスト送信部(305)を介してサーバ側プロキシ(15)へ送信してもよい。
リクエスト送信部(305)は、リクエスト判定部(302)またはデータ管理部(304)から受け取ったリクエストをWAN側コネクション管理部(307)を用いて送信する。
WAN側コネクション管理部(307)は、WANを通じてサーバ側プロキシ(15)との通信の制御を行う。
レスポンス解析部(306)ではサーバ側プロキシ(15)から受信したレスポンスのIPアドレスを解析して、どのクライアント(11)に対するものであるか判断する。また、PROPFINDに対するレスポンスであればその内容も解析しファイル一覧を取得してデータ管理部(304)に登録する。同時にレスポンス送信部(303)に渡してクライアント(11)へ転送する。GETに対するレスポンスであればデータ管理部(304)に登録する。
レスポンス送信部(303)ではレスポンス解析部(306)またはデータ管理部(304)から受信したレスポンスデータをLAN側コネクション管理部(301)に渡してクライアント(11)へ転送する。
図4はサーバ側プロキシ(15)の内部構成を表す図である。サーバ側プロキシ(15)は、クライアントとサーバの間の通信を仲介し、パケットを送受信する通信装置であって、サーバとWANの間にあるのが一例である。または、サーバ側の局所ネットワークのゲートウェイ装置であってもよい。サーバは、例えば情報処理装置である。サーバ側の局所ネットワークは、有線、無線少なくともいずれかで構成されてもよい。WAN側コネクション管理部(401)はクライアント側プロキシ(12)との通信を行う。
クライアント側プロキシからのリクエストはリクエスト判定部(402)にて、リクエストを送信したクライアント(11)が識別される。また、そのリクエストがPROPFINDやGETなど、プリフェッチ動作の契機となるものかどうかが判定される。
プリフェッチ動作中でないとき、受信したリクエストはそのままリクエスト送信部(405)に送られ、サーバへ送信される。プリフェッチ動作中の場合、リクエストは、一旦データ管理部(404)に登録される。
データ管理部(404)は、クライアント側プロキシ(12)と同様にクライアント(11)ごとにデータ管理テーブルを持ち、リクエスト・レスポンスの状態とそのデータを管理する。例えばクライアント(11)が3台あれば3つのテーブル(411〜413)を持つ。プリフェッチ動作中は、テーブルは定期的に調べられ、プリフェッチ未了のエントリがあればプリフェッチを行うため、リクエスト送信部(405)へURLを渡す。クライアント側プロキシ(12)からリクエストを受信した場合、該当レスポンスを送信していなければ、そのリクエストを優先的にリクエスト送信部(405)へ渡し、サーバ(16)へ送信する。
リクエスト送信部(405)は、リクエスト判定部(402)またはデータ管理部(404)から受け取ったリクエストをLAN側コネクション管理部(407)を用いて送信する。LAN側コネクション管理部(406)は、サーバ側プロキシ(15)とサーバ(16)との通信を制御する。
レスポンス解析部(406)ではサーバ(15)から受信したPROPFINDに対するレスポンスを解析しファイル一覧を取得してデータ管理部(404)に登録する。同時にレスポンス送信部(403)を介してクライアント(16)へ転送する。またレスポンスがGETに対するレスポンスであればデータ管理部(404)に登録する。
レスポンス送信部(403)は、レスポンス解析部(406)またはデータ管理部(404)から受信したレスポンスデータをWAN側コネクション管理部(401)を介してクライアント側プロキシ(12)へ転送する。
図5は、(a)クライアント側プロキシおよび(b)サーバ側プロキシのデータ管理部における、データ管理テーブル(311,411)を示す。クライアント側プロキシのデータ管理テーブル(311)は対象となるファイルごとに、ファイルのURL(351)、プリフェッチしたレスポンス(352)、および1または0の値をとる3種類のフラグを持っている。フラグは「クライアントからリクエスト受信済み(353)」、「サーバ側プロキシからレスポンス受信済み(354)」、「クライアントにレスポンス送信済み(355)」である。
「クライアントからリクエスト受信済み(353)」フラグは、そのファイルに対するリクエストをクライアントから受信したとき1に設定される。フラグの値は、0,1以外であっても、クライアントからのリクエストが受信されたかか否かを、識別できる値を用いてもよい。
「サーバ側プロキシからレスポンス受信済み(354)」フラグはそのファイルをサーバ側プロキシから受信したとき1に設定される。フラグの値は、1以外であっても、サーバ側プロキシからレスポンスが受信されたかか否かを、識別できる値を用いてもよい。これらのフラグの両方が1となっていれば、レスポンスはクライアント側プロキシからクライアントへ送信され、「クライアントにレスポンス送信済み(355)」フラグが1に設定される。「クライアントにレスポンス送信済み(355)」フラグが1であれば該当エントリは削除される。
サーバ側プロキシのデータ管理テーブルは対象となるファイルごとに、ファイルのURL(451)、プリフェッチしたレスポンス(452)、および1または0の値をとる3種類のフラグを持っている。フラグは「サーバにプリフェッチリクエスト送信済み(453)」、「クライアント側プロキシからリクエスト受信済み(454)」、「サーバからレスポンス受信済み(456)」である。
「サーバにプリフェッチリクエスト送信済み(453)」フラグは、そのファイルに対するリクエストをサーバに送信したとき1に設定される。フラグの値は、0,1以外であっても、サーバにプリフェッチリクエストが送信されたかか否かを、識別できる値を用いてもよい。「クライアント側プロキシからリクエスト受信済み(454)」フラグはクライアント側プロキシからリクエストを受信したときに1に設定される。「サーバからレスポンス受信済み(455)」フラグはサーバからレスポンスを受信したときに1に設定される。このフラグが1のときにレスポンスはクライアント側プロキシに送信され、エントリが削除される。
図6はクライアント側プロキシ(12)の動作を表すフローチャートである。初期状態ではLAN側でパケットを受信するまで待機する(501)。クライアント側プロキシ(12)は、LAN側でパケットを受信すると、送信元および宛先IPアドレスごとに分離する(502)。そのパケットがPROPFINDリクエストであれば(503)、クライアント側プロキシ(12)は、サーバ側プロキシへ転送して(504)、GET待ち状態へ移行する。その他のリクエストであれば(551)、同様にサーバ側プロキシへ転送する(552)が、プリフェッチの準備は行わず、サーバ側プロキシ(15)からレスポンスを受信するのを待って(553)それをクライアント(11)へ転送し(554)、初期状態(501)へ戻る。
サーバ側プロキシへ転送したPROPFIND(504)のレスポンスが受信されるまで、クライアント側プロキシ(12)は、当該PROPFIND(504)に関する処理を待機する(505)。PROPFIND(504)のレスポンスが受信されると、クライアント側プロキシ(12)は、そのレスポンスをクライアント(11)へ転送する(506)。また、クライアント側プロキシ(12)は、このレスポンスを解析してファイル一覧を作成し、データ管理部(404)に登録する(507)。
続いて、クライアント側プロキシ(12)は、クライアントからのGETリクエストを待ちうける(508)。GETを受信すると、クライアント側プロキシ(12)は、これをサーバ側プロキシ(15)へ転送し(509)、GETリクエストに対するレスポンスを受信するまで待機する(510)。クライアント側プロキシ(12)は、受信されればクライアント(11)へ転送(511)し、サーバ側プロキシ(15)からのプリフェッチデータを待ちうける(512)。GET以外のリクエストを受信した場合(555)は、同様にサーバ側プロキシ(15)へ転送する(556)が、WAN側からレスポンスを受信するのを待って(557)それをクライアント(11)へ転送し(558)、初期状態(501)へ戻る。
サーバ側プロキシ(15)からのプリフェッチデータを受信すると(512)、クライアント側プロキシ(12)は、これをデータ管理部(304)に保存して(513)、クライアントからのリクエストを待ちうける(514)。リクエストを受信すると、リクエストに該当するファイルをデータ管理部(304)に保存されているプリフェッチデータから読み出し、保存していたプリフェッチデータをレスポンスとしてクライアントに送信する(515)。
ファイル一覧にファイルが残っていれば、512以降を繰り返す(516)。すべてのデータを転送し終わるか、タイムアウトによりプリフェッチしたデータを破棄し初期状態(501)に戻る(517)。
上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
図7は、サーバ側プロキシ(15)の動作を表すフローチャートである。初期状態ではWAN側でパケットを受信するまで待機する(601)。サーバ側プロキシ(15)は、受信すると送信元および宛先IPアドレスごとに分離する(602)。そのパケットがPROPFINDリクエストであれば(603)、サーバ側プロキシ(15)は、サーバ(16)へ転送して(604)GET待ち状態へ移行する。その他のリクエストであれば(651)、サーバ側プロキシ(15)は、サーバ(16)へ転送する(652)が、プリフェッチの準備は行わず、サーバ側プロキシ(15)は、サーバ(16)からレスポンスを受信するのを待って(653)それをクライアント(11)側へ転送し(654)、初期状態(601)へ戻る。
一方、サーバ側プロキシ(15)は、ステップ603の後、サーバ(16)へ転送したPROPFIND(604)のレスポンスが受信されるまで待機し(605)受信されるとクライアント側プロキシ(15)へ転送する(606)。また、サーバ側プロキシ(15)は、PROPFIND(604)に対するレスポンスを解析してファイル一覧を作成し、データ管理部(404)に登録する(607)。
続いてクライアント側プロキシ(12)からのGETリクエストを待ちうける(608)。GETを受信すると、サーバ側プロキシ(15)は、これをサーバ(16)へ転送し(609)、それに対するレスポンスを受信するまで待機する(610)。受信されればクライアント側プロキシ(12)へ転送し(611)、データ管理部(404)に登録されているファイル一覧に従って、次のファイルに対するプリフェッチリクエストを送信する(612)。GET以外のリクエストを受信した場合(655)は、サーバ側プロキシ(15)は、にサーバへ転送する(656)が、サーバ(16)からレスポンスを受信するのを待って(657)それをクライアント側プロキシ(12)へ転送し(658)、初期状態(601)へ戻る。
一方、ステップ612に対してサーバ(16)からのプリフェッチデータを受信すると(613)、サーバ側プロキシ(15)は、クライアント側プロキシに送信する(614)。
ファイル一覧に従って、サーバ側プロキシ(15)は、サーバから受信されていないファイルが残っていれば、612以降を繰り返す(615)。すべてのデータを転送し終わるか、タイムアウトによりプリフェッチしたデータを破棄し初期状態(601)に戻る(616)。
上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
本発明の第二の実施例における通信シーケンスを図8に示す。図8では通信にかかわる、クライアント(11)、クライアント側プロキシ(12)、サーバ側プロキシ(15)、およびサーバ(16)のシーケンスを示している。本実施例の方式により、実施例1の場合と比べて同等の通信効率を保ちながら、WAN上の通信をWebDAVの標準プロトコルにのっとったものとする。それによりWAN上の通信がファイアウォール、Intrusion Detection System/Intrusion Protection System、Deep Packet Inspectionなどのセキュリティシステムにより、異常な通信であると判断されて遮断されることを防ぐことができる。
手順701、702、711、712、721、722は、図1の手順101、102、111、112、121、122と同様にPROPFINDのリクエストとそのレスポンスと同様である。
ファイル一覧を取得したクライアント(11)は、各ファイルに対して順にリクエストを送信する。クライアント(11)から送信された最初のファイルに対するリクエスト(703)は、クライアント側プロキシ(12)によって受信される。クライアント側プロキシ(12)は、このリクエストを解析して、PROPFINDリクエストに対するレスポンスであるファイル一覧中に含まれるファイル(ファイル1)であると判断すると、このリクエストをサーバ側プロキシ(15)へ転送する(713)。さらに、クライアント側プロキシ(12)は、クライアントからのリクエスト(707)で指定されるファイル(ファイル1)ではないが、ファイル一覧にある他のファイル(ファイル2、3)に対するリクエスト(714、715)も発行する。これらのリクエストは前のリクエストに対するレスポンスを待つことなくサーバ側プロキシ(15)へ送信される(714,715)。
サーバ側プロキシ(15)は、クライアント側プロキシ(12)からのリクエストを受信(713)すると、ファイル一覧中のファイルで、クライアントからの最初のリクエストで指定されたファイル(ファイル1)に対するリクエストを、クライアント(11)に代わってサーバ(16)に送信する(723)。サーバ(16)は、これに対するレスポンスとしてファイル1を送信する(724)。これを受信したサーバ側プロキシ(15)は、このファイルをクライアント側プロキシ(12)へ転送(716)する。
また、サーバ側プロキシ(15)は、サーバ(16)からのファイル1の受信に応じて、受信したファイル1が含まれるファイル一覧に次のファイル(ファイル2)があればそれに対するリクエストを送信する(725)。サーバ側プロキシ(15)が同リクエストに対するレスポンスを受信(726)すると、これをクライアント側プロキシ(12)へ転送する(717)。さらに、次のファイルも、ステップ725、726、717と同様にプリフェッチを行うと(727,728,718)、サーバ側プロキシ(15)は、ファイル一覧に次のファイルがない場合、ファイル一覧を破棄して動作を完了する。このリクエストは前のリクエストに対するレスポンスを受信してから開始してもよいし、複数のリクエストを同時に送信してもよい。
クライアント側プロキシ(12)は、ファイル1のレスポンスを受信(716)すると、これをクライアント(11)へ転送する(704)。クライアント(11)はファイル2に対するリクエストを送信する(705)。一方でファイル2のレスポンスは、サーバ側プロキシ(15)より受信される(717)ので、ファイル2に対するリクエストとレスポンスがそろった段階で、クライアント(11)に対してレスポンスを送信する(706)。同様の動作をファイル一覧中の全てのファイルに対して繰り返し(718,707,708)、ファイル一覧を破棄して動作を完了する。
上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
図9は第二の実施例におけるクライアント側プロキシ(12)の動作を表すフローチャートである。ステップ801ないし807、851ないし854は、図6のステップ501ないし507、551ないし554と同様である。
続いてクライアントからのGETリクエストを待ちうける(808)。クライアント側プロキシ(12)は、GETリクエストを受信するとこれを契機にファイル一覧中のファイルに対してプリフェッチリクエストを発行する(809)。このリクエストは前のリクエストに対するレスポンスを待たずに送信される。ファイル一覧中の全てのファイルに対してリクエストを送信するまでこれを繰り返す(810)。GET以外のリクエストを受信した場合(855)は、同様にサーバ側プロキシ(15)へ転送する(856)が、WAN側からレスポンスを受信するのを待って(857)それをクライアント(11)へ転送し(858)、初期状態(801)へ戻る。
サーバ側プロキシ(15)から最初のリクエストに対するレスポンスを受信すると(811)、クライアント側プロキシ(12)は、これをクライアントへ転送する(812)。クライアント側プロキシ(12)は、サーバ側プロキシ(15)からのプリフェッチデータを受信すると(813)、これをデータ管理部(304)に保存して(814)、クライアントからのリクエストを待ちうける(815)。リクエストを受信すると、クライアント側プロキシ(12)は、保存していたデータをレスポンスとしてクライアントに送信する(816)。
ファイル一覧にファイルが残っていれば、812以降を繰り返す(817)。すべてのデータを転送し終わるか、タイムアウトによりプリフェッチしたデータを破棄し初期状態(801)に戻る(818)。上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
図10は第二の実施例におけるサーバ側プロキシ(15)の動作を表すフローチャートである。ステップ901ないし907、951ないし954は、図7のステップ601ないし607、651ないし654と同様である。 続いてクライアント側プロキシ(12)からのプリフェッチリクエストを待ちうける(908)。プリフェッチリクエストは、ファイル一覧に含まれるファイルの数に対応して複数送られるため、サーバ側プロキシ(15)は、ファイル一覧に含まれるファイルの数に対応する全てのリクエストを受信するまでこれを繰り返す(909)。続いて、プリフェッチリクエストを順次サーバ(16)へ転送し(910)、それに対するレスポンスを受信するまで待機する(911)。サーバ側プロキシ(15)は、レスポンスが受信されればクライアント側プロキシ(12)へ、それらを転送する(912)。GET以外のリクエストを受信した場合(955)は、サーバ側プロキシ(15)は、同様にサーバ(16)へ転送する(956)が、サーバ側プロキシ(15)は、サーバ(16)からGET以外のリクエストに対応するレスポンスを受信するのを待って(957)それをクライアント側プロキシ(12)へ転送し(958)、初期状態(901)へ戻る。
ファイル一覧にサーバから取得していないファイルが残っていれば、910以降を繰り返す(913)。すべてのデータを転送し終わるか、タイムアウトによりプリフェッチしたデータを破棄し初期状態(901)に戻る(914)。上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
装置内の構成については実施例1の場合と同様であるので、ここでは省略する。
以上の実施例2の説明により、WebDAVに従った通信により得られた情報を用いて、プリフェッチするリクエストとレスポンスとを対応づけ、プロキシ間での通信制御を行うことを説明した。その制御により、WAN上の通信がファイアウォール、Intrusion Detection System/Intrusion Protection System、Deep Packet Inspectionなどのセキュリティシステムにより、プリフェッチするための通信が、異常な通信であると判断されて遮断されることを防ぐことができる。
本発明の第三の実施例における通信シーケンスを図11に示す。この例では実施例2の方式をHTTPに適用している。本実施例の方式により、実施例2の場合と同様に、WAN上の通信はHTTPの標準にのっとったものとなるため、セキュリティシステムにより異常な通信として判断され遮断されることを防ぐことができる。
クライアントが、サーバからウェブページを読み込む場合、まずHTMLファイルに対してGETというリクエスト(1001)を発行する。これはクライアント側プロキシ(12)で受信され、サーバ側プロキシ(15)へとWAN上を転送される(1011)。サーバ側プロキシ(15)はこれを受信すると、サーバ(16)へさらに転送する(1021)。HTMLに対するGETを受信したサーバ(16)は、そのHTMLファイルをクライアントへ返送する(1022)。このレスポンス(1022)は、HTTPに従った「200 OK」というレスポンスであり、フォルダ内のファイル一覧が含まれる。同レスポンスはサーバ側プロキシ(15)でクライアント側プロキシ(12)へ転送され(1012)、サーバ側プロキシ(15)は、このレスポンスを解析することによりフォルダ内のファイル一覧を取得する。さらにクライアント側プロキシ(12)でクライアント(11)へ転送される(1002)。クライアント側プロキシ(12)でも同様にこのレスポンスを解析し、ファイル一覧を取得する。クライアント(11)はクライアント側プロキシ(12)およびサーバ側プロキシ(15)とは、独立してこのレスポンスを解析してファイル一覧を取得する。
ファイル一覧を取得したクライアント(11)は、各ファイルに対して順にリクエストを送信する。クライアント(11)から送信された最初のファイルに対するリクエスト(1003)は、クライアント側プロキシ(12)によって受信される。
クライアント側プロキシ(12)は、このリクエストを解析して、ファイル一覧中に含まれるファイルであると判断すると、このリクエストをサーバ側プロキシ(15)へ転送する(1013)。クライアント11からのリクエストで指定されるファイルが「200 OK」のレスポンス(1012)で取得したファイル一覧中に含まれるファイル(file 1)であると、クライアント側プロキシ(12)が判断すると、そのファイル一覧の他のファイル(file2, 3)に対するリクエストも発行する。これらのリクエストは前のリクエストに対するレスポンスを待つことなくサーバ側プロキシ(15)へ送信される(1014,1015)。つまり、クライアントからファイル一覧に含まれる一のファイルを指定するリクエストがくると、クライアント側プロキシ(12)は、ファイル一覧に含まれる他のファイルについてのリクエストも、クライアント(11)からのリクエストを待つことなく、サーバ側プロキシ(15)にプリフェッチリクエスト(1014、1015)を発行する。
サーバ側プロキシ(15)は、クライアント側プロキシ(12)からのリクエストを受信(1013)すると、ファイル一覧中のファイルに対するリクエストを、クライアント(11)に代わってサーバ(16)に送信する(1023)。サーバ(16)はこれに対するレスポンスとしてファイルを送信する(1024)。
これを受信したサーバ側プロキシ(15)は、このファイルをクライアント側プロキシ(12)へ転送(1016)するとともに、レスポンス(1022)で取得したファイル一覧に他のファイルがあればそれに対するリクエストをサーバ(16)に送信する(1025)。
サーバ側プロキシ(15)は、同リクエストに対するレスポンスを受信(1026)すると、これをクライアント側プロキシ(12)へ転送する(1017)。他のファイルも同様にプリフェッチを行う(1027,1028,1018)。なお、サーバ側プロキシ(15)は。クライアント側プロキシ(12)から送信されるプリフェッチリクエストに対応するファイルのリクエストをサーバ(16)送信してもよい。サーバ側プロキシ(15)は、ファイル一覧に次のファイルがないので、ファイル一覧を破棄して動作を完了する。このリクエストは前のリクエストに対するレスポンスを受信してから開始される。
クライアント側プロキシ(12)は、ファイル1のレスポンスを受信(1016)すると、これをクライアント(11)へ転送する(1004)。クライアント(11)は、ファイル一覧に含まれるファイル2に対するリクエストを送信する(1005)。一方でファイル2のレスポンスはサーバ側プロキシ(15)から送信される(1017)ので、クライアント側プロキシ(12)は、ファイル2に対するリクエストを保持し、レスポンスを受領した場合に、クライアント(11)に対して、保持しているファイル2に対するリクエストに対応するレスポンスを送信する(1006)。同様の動作をファイル一覧に含まれるファイルに対して繰り返し(1018,1007,1008)、ファイル一覧をバッファから破棄して動作を完了する。
上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
図12は、実施例3におけるクライアント側プロキシ(12)の動作を表すフローチャートである。初期状態ではLAN側でパケットを受信するまで待機する(1101)。受信すると送信元および宛先IPアドレスごとに分離する(1102)。そのパケットがHTMLに対するGETリクエストであれば(1103)サーバ側プロキシへ転送して(1104)GET待ち状態へ移行する。その他のリクエストであれば(1151)、同様にサーバ側プロキシ(15)へ転送する(1152)が、プリフェッチの準備は行わず、サーバ側プロキシ(15)からレスポンスを受信するのを待って(1153)それをクライアント(11)へ転送し(1154)、初期状態(1101)へ戻る。
サーバ側プロキシへ転送したHTMLに対するGET(1104)のレスポンスが受信されるまで待機し(1105)受信されるとクライアント(11)へ転送する(1106)。同時にこのレスポンスを解析してファイル一覧を作成し、データ管理部(304)に登録する(1107)。
続いてクライアントからのGETリクエストを待ちうける(1108)。ファイル一覧に含まれるファイルに対するGETリクエストを受信すると、クライアント側プロキシは、これを契機にファイル一覧中のファイルに対してプリフェッチリクエストを発行する(1109)。これらのリクエストは前のリクエストに対するレスポンスを待たずに送信される。また、クライアントからのGETリクエストで指定されるファイルだけでなく、GETリクエストで特定されるファイル一覧に含まれるファイルに対してリクエストを送信するまでこれを繰り返す(1110)。GET以外のリクエストを受信した場合(1155)は、同様にサーバ側プロキシ(15)へ転送する(1156)が、WAN側からレスポンスを受信するのを待って(1157)それをクライアント(11)へ転送し(1158)、初期状態(1101)へ戻る。
サーバ側プロキシ(15)から最初のリクエストに対するレスポンスを受信すると(1111)、クライアント側プロキシ(12)は、これをクライアントへ転送する(1112)。サーバ側プロキシ(15)からのプリフェッチデータを受信すると(1113)、クライアント側プロキシ(12)は、これをデータ管理部(304)に保存して(1114)、クライアントからのリクエストを待ちうける(1115)。クライアントからのリクエストを受信すると、クライアント側プロキシ(12)は、当該リクエストで指定されるファイルに対応する、ファイルを保存していたデータから読み出し、そのデータをレスポンスとしてクライアントに送信する(1116)。
クライアント側プロキシ(12)は、ファイル一覧にファイルが残っていれば、1112以降を繰り返す(1117)。クライアント側プロキシ(12)は、すべてのデータを転送し終わるか、タイムアウトによりプリフェッチしたデータを破棄し初期状態(1101)に戻る(1118)。
上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
図13は、実施例3におけるサーバ側プロキシ(15)の動作を表すフローチャートである。初期状態ではWAN側でパケットを受信するまで待機する(1201)。受信すると送信元および宛先IPアドレスごとに分離する(1202)。そのパケットがHTMLに対するGETリクエストであれば(1203)サーバ(16)へ転送して(1204)GET待ち状態へ移行する。その他のリクエストであれば(1251)、同様にサーバ(16)へ転送する(1252)が、プリフェッチの準備は行わず、サーバ(16)からレスポンスを受信するのを待って(1253)それをクライアント(11)へ転送し(1254)、初期状態(1201)へ戻る。
サーバ(16)へ転送したHTMLに対するGET(1204)のレスポンスが受信されるまで待機し(1205)受信されるとクライアント側プロキシ(15)へ転送する(1206)。同時にこのレスポンスを解析してファイル一覧を作成する(1207)。
続いてクライアント側プロキシ(12)からのプリフェッチリクエストを待ちうける(1208)。図11の1014及び1015がプリフェッチリクエストである。リクエストは連続して複数送られるため、全てのリクエストを受信するまでこれを繰り返す(1209)。続いてこれを順次サーバ(16)へ転送し(1210)、それに対するレスポンスを受信するまで待機する(1211)。少なくとも一のレスポンスが受信されれば、サーバ側プロキシ(15)は、そのレスポンスをクライアント側プロキシ(12)へ転送する(1212)。なお、図11の1023ないし1028のように、サーバ側プロキシは、一のファイルのリクエストに対するサーバからのレスポンス受領後に、別のファイルのリクエストを送信していてもよい。
GET以外のリクエストを受信した場合(1255)は、同様にサーバへ転送する(1256)が、サーバ(16)からレスポンスを受信するのを待って(1257)それをクライアント側プロキシ(12)へ転送し(1258)、初期状態(1201)へ戻る。
ファイル一覧にファイルが残っていれば、1210以降を繰り返す(1213)。すべてのデータを転送し終わるか、タイムアウトによりプリフェッチしたデータを破棄し初期状態(1201)に戻る(1214)。 上記動作は、クライアント側プロキシ(12)、サーバ側プロキシ(15)の双方にてクライアント(11)およびサーバ(16)の組ごとに独立に行われる。クライアント(11)およびサーバ(16)の識別はパケットヘッダ中のIPアドレスを用いて行う。
装置内の構成については実施例1の場合と同様であるので、ここでは省略する。
本発明の第四の実施例を図14に示す。この例では実施例1の複数のクライアントが、同一のフォルダをダウンロードした際に、プロキシにて読み込み済みのデータをバッファに保持し、一のクライアントからのアクセスで削除するのではなく、複数のクライアントからのアクセスのためにバッファに保持し、複数のクライアントにファイルを転送することにより、データ転送量の削減を図っている。
この例では実施例1の場合にクライアントB(11b)が追加されており、クライアントA(11a)と同一のフォルダに対しダウンロードを試みている。クライアントA(11a)のシーケンスは実施例1と同様であるので、詳細は省略する。
クライアント側プロキシ(12)では、フォルダカウント(1410)という値を用いてフォルダごとの同時アクセスしているクライアント数を管理する。クライアントA(11a)からのPROPFIND(201)を受信すると、クライアント側プロキシ(12)は、フォルダカウント(1410)を1に更新する。この値が1である間にクライアントB(11b)からPROPFIND(1401)が送信され、これを受信したクライアント側プロキシ(12)は、フォルダカウントを2に更新する(1411)。クライアント側プロキシ(12)は、PROPFINDに対するレスポンスを保持し、これをクライアントB(11b)に送信する(1402)。これを受けて、クライアント(11)がフォルダ内のファイルに対してGETを発行する(1403)。これに対するレスポンスもクライアント側プロキシ(12)が保持しているため、クライアント側プロキシ(12)はそれをそのまま送信する。(1404)。
一方でクライアントA(11a)への転送はファイル3にて終了し(208)、クライアント側プロキシ(12)のフォルダカウントは1となる(1412)。
クライアントB(11b)への転送はファイル2(1405、1406)、ファイル3(1407、1408)と続き、終了する。このときクライアント側プロキシ(12)のフォルダカウントが1であるので、このカウンタおよびフォルダ内のファイルを削除して終了する。
図15はクライアント側プロキシ(12)の内部構成を表す図である。本実施例では、実施例1の構成に共有データプール(1501)とフォルダテーブル(1502)を追加したものとなっている。レスポンスデータはクライアントごとのデータ管理テーブルではなく、クライアント(11a、11b)間で共有される共有データプール(1501)に格納される。また、フォルダテーブル(1502)はフォルダごとにそのフォルダにアクセスしているクライアント数を示すテーブルである。他は図3と同様である。
図16はサーバ側プロキシ(15)の内部構成を表す図である。本実施例では、実施例1の構成に共有データプール(1601)とフォルダテーブル(1602)を追加したものとなっている。これらはクライアント側プロキシのものと同様の機能を持つ。他は図4と同様である。
図17(a)はクライアント側プロキシ(12)のデータ管理部(304)における、データ管理テーブル(311〜313)を示す。また図17(b)はサーバ側プロキシのデータ管理部(404)における、データ管理テーブル(411〜413)を示す。実施例1との違いは、これらのテーブルではレスポンスを管理しないため、レスポンス内容(352、452)の項目がない点である。
図17(c)は共有データプール(1501、1601)のデータテーブルを示す。これは、URL(1551)、レスポンス内容(1552)、ファイルが属するフォルダの情報(1553)を持つ。フォルダの情報は単なるフォルダ名でも、後述するフォルダテーブルのエントリへのポインタでよい。このデータはすべてのクライアント(11a、11b)で共有され、他のクライアントのリクエストによりプリフェッチされたデータであっても、データがこの中にあればこのデータをレスポンスとして送信する。
図17(d)はフォルダテーブル(1502)を示す。これは、フォルダ名(1554)とカウンタ(1555)を持ち、カウンタ(1555)はフォルダごとにそのフォルダにアクセスしているクライアントの数を示しており、1以上の値をとる。フォルダ内全ファイルの転送が完了すると、プロキシはフォルダテーブル(1502)をチェックし、カウンタ(1555)の値が2以上であれば、他にアクセスしているクライアントがいるため同フォルダ内のファイルを削除しない。一方カウンタ(1555)の値が1であった場合は、他にアクセスしているクライアントがいないのでファイルを削除する。
図18はクライアント側プロキシ(12)の動作を表すフローチャートである。初期状態ではLAN側でパケットを受信するまで待機する(1801)。受信すると送信元および宛先IPアドレスごとに分離する(1802)。そのパケットがPROPFINDリクエストであれば(1803)フォルダテーブルをカウントアップする(1804)。その他のリクエストであれば(1851)、同様にサーバ側プロキシ(15)へ転送する(1852)が、サーバ側プロキシ(15)からレスポンスを受信するのを待って(1853)それをクライアント(11)へ転送し(1854)、初期状態(1801)へ戻る。
フォルダカウントが2以上であれば(1805)、他のクライアントが読み込んだデータが存在するため、そのデータ(PROPFINDに対するレスポンス)をレスポンスとしてクライアント(11)へ送信する(1806)。フォルダカウントが1であれば、PROPFINDリクエストをサーバ側プロキシ(15)へ転送して(1807)GET待ち状態へ移行する。サーバ側プロキシ(15)へ転送したPROPFINDのレスポンスが受信されるまで待機し(1808)受信されるとクライアント(11)へ転送する(1809)。同時にこのレスポンスを解析してファイル一覧を作成する(1810)。
続いてクライアントからのGETリクエストを待ちうける(1811)。GET以外のリクエストを受信した場合(1855)は、同様にサーバ側プロキシ(15)へ転送する(556)が、WAN側からレスポンスを受信するのを待って(557)それをクライアント(11)へ転送し(558)、初期状態(501)へ戻る。
GETを受信した場合、フォルダカウントを参照し(1812)、2以上であれば他のクライアントが読み込んだデータが存在するため、そのデータをレスポンスとしてクライアントへ送信する(1813)。フォルダ内の全ファイルを転送完了するかタイムアウトするまでこれを繰り返し(1814)、終了したらフォルダカウントをカウントダウンする(1815)。
フォルダカウントが1であった場合、リクエストをサーバ側プロキシ(15)へ転送し(1816)、それに対するレスポンスを受信するまで待機して(1817)、受信されればクライアント(11)へ転送し(1817)、サーバ側プロキシ(15)からのプリフェッチデータを待ちうける(1818)。 サーバ側プロキシ(15)からのプリフェッチデータを受信すると(1818)、これをデータ管理部(304)に保存して(1820)、クライアントからのリクエストを待ちうける(1821)。リクエストを受信すると保存していたデータをレスポンスとしてクライアントに送信する(1822)。
ファイル一覧にファイルが残っていれば、512以降を繰り返す(1823)。すべてのデータを転送し終わるか、タイムアウトによりフォルダカウントをカウントダウンし、初期状態(1801)に戻る(1824)。
図19はサーバ側プロキシ(15)の動作を表すフローチャートである。初期状態ではWAN側でパケットを受信するまで待機する(1901)。受信すると送信元および宛先IPアドレスごとに分離する(1902)。そのパケットがPROPFINDリクエストであれば(1903)フォルダテーブルをカウントアップする(1904)。その他のリクエストであれば(1951)、同様にサーバ(16)へ転送する(1952)が、サーバ(16)からレスポンスを受信するのを待って(1953)それをクライアント側プロキシ(12)へ転送し(1954)、初期状態(1901)へ戻る。
フォルダカウントが2以上であれば(1905)、他のクライアントが読み込んだデータが存在するため、そのデータ(PROPFINDに対するレスポンス)をレスポンスとしてクライアント側プロキシ(12)へ送信する(1906)。フォルダカウントが1であれば、PROPFINDリクエストをサーバ(16)へ転送して(1907)GET待ち状態へ移行する。サーバ(16)へ転送したPROPFINDのレスポンスが受信されるまで待機し(1908)受信されるとクライアント側プロキシ(12)へ転送する(1909)。同時にこのレスポンスを解析してファイル一覧を作成する(1910)。
続いてクライアント側プロキシ(12)からのGETリクエストを待ちうける(1911)。GET以外のリクエストを受信した場合(1955)は、同様にサーバへ転送する(1956)が、サーバ(16)からレスポンスを受信するのを待って(1957)それをクライアント側プロキシ(12)へ転送し(1958)、初期状態(1901)へ戻る。
GETを受信した場合、フォルダカウントを参照し(1912)、2以上であれば他のクライアントが読み込んだデータが存在するため、そのデータをレスポンスとしてクライアント側プロキシ(12)へ送信する(1913)。フォルダ内の全ファイルを転送完了するかタイムアウトするまでこれを繰り返し(1914)、終了したらフォルダカウントをカウントダウンする(1915)。
フォルダカウントが1であった場合、リクエストをサーバ(16)へ転送し(1916)、それに対するレスポンスを受信するまで待機する(1917)。受信されればクライアント側プロキシ(12)へ転送し(1918)、次のファイルに対するプリフェッチリクエストを送信する(1919)。 サーバ(16)からのプリフェッチデータを受信すると(1920)、クライアント側プロキシに送信する(1921)。ファイル一覧にファイルが残っていれば、1919以降を繰り返す(1922)。すべてのデータを転送し終わるか、タイムアウトによりプリフェッチしたデータを破棄し初期状態(1901)に戻る(1923)。
上述の実施例により、HTTPやWebDAVに従う通信で、サーバからクライアントの利用状況に応じて複数ファイルを効率的に転送するとができる。