(57)【特許請求の範囲】
【請求項１】
サーバからのコンテンツをクライアントに転送し、クライアントからのコンテンツ要求をサーバに転送するシステムに適用するリンク先圧縮システムであって、
クライアントからのコンテンツ要求に含まれるURLとそのURLのアクセス回数をマッピング情報として記録する手段と、
前記アクセス回数が予め設定した回数以上になったとき、そのURLの文字数よりも短い文字数の圧縮URLをマッピング情報として記録する手段と、
サーバからのコンテンツに含まれるすべてのリンク先のURLを前記マッピング情報に基づいて圧縮URLに変換する手段と、
クライアントからのコンテンツ要求に含まれる圧縮URLを前記マッピング情報に基づいてURLに変換する手段と
を備えることを特徴とするリンク先圧縮システム。
【請求項２】
サーバからのコンテンツをクライアントに転送し、クライアントからのコンテンツ要求をサーバに転送するシステムに適用するリンク先圧縮システムであって、
クライアントからのコンテンツ要求に含まれるURLを、先頭要素とパラメタ要素と値要素とに分割する手段と、
クライアントからのコンテンツ要求に含まれるURLを分割した各分割要素とその分割要素のアクセス回数をマッピング情報として記録する手段と、
前記アクセス回数が予め設定した回数以上になったとき、その分割要素を示す文字数よりも短い文字数の圧縮ワードをマッピング情報として記録する手段と、
サーバからのコンテンツに含まれるすべてのリンク先のURLのそれぞれに対して、そのURLを先頭要素とパラメタ要素と値要素とに分割し、前記マッピング情報に基づいて各分割要素を圧縮ワードに変換することにより圧縮URLを取得し、前記サーバからのコンテンツ中の当該URLを前記取得した圧縮URLに書き換える手段と、
クライアントからのコンテンツ要求に含まれる圧縮URLを先頭要素とパラメタ要素と値要素とに分割し、前記マッピング情報に基づいて各分割要素の圧縮ワードを元の分割要素を示す文字列に変換することにより元のURLを取得し、前記クライアントからのコンテンツ要求に含まれる圧縮URLを元のURLに書き換える手段と
を備えることを特徴とするリンク先圧縮システム。
【請求項３】
請求項１または２に記載のリンク先圧縮システムにおいて、
前記マッピング情報として、当該URLまたは分割要素へのアクセス日付を記録する手段と、
前記マッピング情報のアクセス日付が、現在日から予め設定したタイムアウト期間だけ過去に遡った日付よりも古い場合に、当該マッピング情報を削除する手段と
をさらに備えることを特徴とするリンク先圧縮システム。
【請求項４】
請求項３に記載のリンク先圧縮システムにおいて、
前記タイムアウト期間を通常データ用と圧縮データ用の２つ用意し、前記マッピング情報のうち、圧縮URLまたは圧縮ワードが登録されているものについては前記圧縮データ用のタイムアウト期間を用いて当該マッピング情報を削除するかどうかを決定し、圧縮URLまたは圧縮ワードが登録されていないものについては前記通常データ用のタイムアウト期間を用いて当該マッピング情報を削除するかどうかを決定する手段をさらに備えることを特徴とするリンク先圧縮システム。
【請求項５】
請求項１または２に記載のリンク先圧縮システムにおいて、
クライアントからサーバへのコンテンツ要求に含まれるURLが、圧縮URLでなく、かつ、前記マッピング情報に当該URLに対応する圧縮URLが登録されている場合、クライアントに圧縮URLを利用する旨の通知を行う手段をさらに備えることを特徴とするリンク先圧縮システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、コンテンツ配信システムのサーバとクライアントの間にプロキシサーバを設置し、該プロキシサーバを経由して通信されるURLを圧縮するリンク先圧縮システムに関する。
【０００２】
【従来の技術】
クライアントとして携帯電話を利用した場合、ハードウェアの制約により、一つのコンテンツ要求で処理できるURLの文字列長が制限されている。そのため、制限を超えたURLを扱うことができない。しかし、携帯電話は、コンテンツ変換サーバを介して、PC向けに作成されたサーバをアクセスすることがある。この場合、PC向けに作成されたサーバでは、携帯電話の制限を超えるURLを記述するコンテンツが作成されることもある。
【０００３】
また、携帯電話の通信では、多くの場合、従量課金方式が採用されているため、通信量を減らすことは通信料金を抑えることに役立つ。そのため、サーバとクライアントの間で通信されるURLの圧縮が行われる。以下に、URL圧縮の従来の技術を示す。まず、プロキシサーバは、サーバから送られるコンテンツ内部の接続先URLを圧縮したURL（圧縮URL）に変換して、クライアントに転送する。このとき、プロキシサーバは、接続先URLと圧縮URLのマッピング情報（対応情報）を記録する。プロキシサーバがクライアントからの圧縮URLを受信したとき、前記マッピング情報から圧縮URLに対応する接続先URLを検索して、サーバに転送する。
【０００４】
【発明が解決しようとする課題】
上述の従来技術では、プロキシサーバはほとんど利用されないURLに対してもマッピング情報を保持しなければいけないため、リソースを多く消費していた。さらに、割当てる圧縮URLの名前空間を無駄に消費してしまい、利用頻度の高いURLに効率的な圧縮URLを割当てることができない。
【０００５】
また、上記問題の解決策として、プロキシサーバがマッピング情報を一時的に保持する方法が考えられる。しかし、この方法では、クライアントが圧縮URLを記録した後、ある程度期間を経てから前記記録した圧縮URLでアクセスした場合、プロキシサーバからマッピング情報が既に削除されているため、目的のコンテンツを得ることができない弊害が出てしまう。
【０００６】
さらに、会員制サービスや商品売買などのコンテンツを提供するサーバでは、通信のセッション管理をする必要がある。しかし、携帯電話ではセッション管理にCookieを利用できないものがあるため、URLにセッション識別子を付加してセッション管理を行う方法が採られている。この場合、クライアント毎に異なるセッション識別子の付加されたURLを利用するため、そのURLを圧縮しても、別のクライアントはその圧縮URLを利用できない。
【０００７】
本発明は、上記従来技術における問題点を解決し、特に利用頻度の高いURLに効率的な圧縮URLを割当て、圧縮URLの名前空間をできるだけ効率的に使用することができる圧縮システムを提供することを目的とする。
【０００８】
【課題を解決するための手段】
上記目的を達成するため、請求項１に係る発明は、サーバからのコンテンツをクライアントに転送し、クライアントからのコンテンツ要求をサーバに転送するシステムに適用するリンク先圧縮システムであって、クライアントからのコンテンツ要求に含まれるURLとそのURLのアクセス回数をマッピング情報として記録する手段と、前記アクセス回数が予め設定した回数以上になったとき、そのURLの文字数よりも短い文字数の圧縮URLをマッピング情報として記録する手段と、サーバからのコンテンツに含まれるすべてのリンク先のURLを前記マッピング情報に基づいて圧縮URLに変換する手段と、クライアントからのコンテンツ要求に含まれる圧縮URLを前記マッピング情報に基づいてURLに変換する手段とを備えることを特徴とする。
【０００９】
請求項２に係る発明は、サーバからのコンテンツをクライアントに転送し、クライアントからのコンテンツ要求をサーバに転送するシステムに適用するリンク先圧縮システムであって、クライアントからのコンテンツ要求に含まれるURLを、先頭要素とパラメタ要素と値要素とに分割する手段と、クライアントからのコンテンツ要求に含まれるURLを分割した各分割要素とその分割要素のアクセス回数をマッピング情報として記録する手段と、前記アクセス回数が予め設定した回数以上になったとき、その分割要素を示す文字数よりも短い文字数の圧縮ワードをマッピング情報として記録する手段と、サーバからのコンテンツに含まれるすべてのリンク先のURLのそれぞれに対して、そのURLを先頭要素とパラメタ要素と値要素とに分割し、前記マッピング情報に基づいて各分割要素を圧縮ワードに変換することにより圧縮URLを取得し、前記サーバからのコンテンツ中の当該URLを前記取得した圧縮URLに書き換える手段と、クライアントからのコンテンツ要求に含まれる圧縮URLを先頭要素とパラメタ要素と値要素とに分割し、前記マッピング情報に基づいて各分割要素の圧縮ワードを元の分割要素を示す文字列に変換することにより元のURLを取得し、前記クライアントからのコンテンツ要求に含まれる圧縮URLを元のURLに書き換える手段とを備えることを特徴とする。
【００１０】
請求項３に係る発明は、請求項１または２に記載のリンク先圧縮システムにおいて、前記マッピング情報として、当該URLまたは分割要素へのアクセス日付を記録する手段と、前記マッピング情報のアクセス日付が、現在日から予め設定したタイムアウト期間だけ過去に遡った日付よりも古い場合に、当該マッピング情報を削除する手段とをさらに備えることを特徴とする。
【００１１】
請求項４に係る発明は、請求項３に記載のリンク先圧縮システムにおいて、前記タイムアウト期間を通常データ用と圧縮データ用の２つ用意し、前記マッピング情報のうち、圧縮URLまたは圧縮ワードが登録されているものについては前記圧縮データ用のタイムアウト期間を用いて当該マッピング情報を削除するかどうかを決定し、圧縮URLまたは圧縮ワードが登録されていないものについては前記通常データ用のタイムアウト期間を用いて当該マッピング情報を削除するかどうかを決定する手段をさらに備えることを特徴とする。
【００１２】
請求項５に係る発明は、請求項１または２に記載のリンク先圧縮システムにおいて、クライアントからサーバへのコンテンツ要求に含まれるURLが、圧縮URLでなく、かつ、前記マッピング情報に当該URLに対応する圧縮URLが登録されている場合、クライアントに圧縮URLを利用する旨の通知を行う手段をさらに備えることを特徴とする。
【００１３】
【発明の実施の形態】
以下、図面を用いて本発明の実施の形態を説明する。なお、同一番号は同様の部品・要素を示すものとする。これにより本発明が限定されるものではない。
【００１４】
図１は、本実施の形態のシステムの利用環境を示す図である。クライアント１０１は、コンテンツ配信システムのクライアントとなるPCやPDA(Personal Digital Assistant)、または携帯電話などの機器である。サーバ１０２は、クライアント１０１の要求に応じて、コンテンツを配信するWebサーバである。プロキシ１０３は、クライアント１０１からのコンテンツ要求を適切なサーバに振り分けるシステムである。また、プロキシ１０３は、サーバ１０２からのコンテンツに含まれるURLを圧縮してクライアント１０１へ転送し、クライアント１０１からの圧縮したURLでのコンテンツ要求を伸張してサーバ１０２に転送するものである。
【００１５】
クライアント１０１やサーバ１０２やプロキシ１０３は、公衆回線網やインターネット網や携帯電話網などで構成されるネットワーク１０４を介してデータ通信を行うことができる。ネットワーク１０４には、クライアント１０１やサーバ１０２と同様の機器やシステムが複数接続されている。
【００１６】
図２は、図１のプロキシ１０３の構成要素を詳細に示す図である。プロキシ１０３は、プログラムの実行を行うＣＰＵ２０１と、プログラムやデータをロードするメモリ２０２と、他の機器と通信回線を確立する通信部２０３と、命令やデータの入力を行う入力部２０４と、クライアント１０１からのデータを出力する出力部２０５と、記憶部２０６が、バス２１５で相互に接続されて構成されている。記憶部２０６は、転送プログラム２０７、URL圧縮プログラム２０８、URL伸張プログラム２０９、ガベージコレクションプログラム２１０、URL変換テーブル２１１、パラメタ変換テーブル２１２、値変換テーブル２１３、及び閾値設定テーブル２１４などを記憶する。
【００１７】
通信部２０３は、クライアント１０１やサーバ１０２などを含めネットワーク１０４に接続している機器との間で通信回線を確立し、データ交換を行う機能を持つ。入力部２０４は、キーボード、マウス、ペン入力、音声入力、ボタン、ジョグダイヤル、または十字キーなどの入力手段を持つ。出力部２０５は、ディスプレイ、または音声などの出力手段を持つ。
【００１８】
転送プログラム２０７は、クライアント１０１からのコンテンツ要求をサーバ１０２へ転送し、サーバ１０２からのコンテンツをクライアント１０１に転送するプログラムである。URL圧縮プログラム２０８は、サーバ１０２からクライアント１０１へ転送されるコンテンツ内のURLを分割して（分割の仕方については後述する）、各分割要素の出現回数をカウントし、その出現回数に基づいて分割要素を圧縮するプログラムである。URL伸張プログラム２０９は、クライアント１０１からサーバ１０２へ転送されるコンテンツ要求のURLについて、それがURL圧縮プログラム２０８で圧縮されたものであるか否かを判断し、圧縮されている場合は伸張して通常のURLに戻すプログラムである。ガベージコレクションプログラム２１０は、プロキシ１０３で定期的に起動して、URL圧縮プログラム２０８やURL伸張プログラム２０９で不必要な情報を削除するプログラムである。
【００１９】
本実施の形態のシステムでは、URL圧縮プログラム２０８やURL伸張プログラム２０９で利用する変換テーブルを３つ持っている。それぞれの変換テーブルは、圧縮するURLを、「？」と「＝」と「＆」に基づいて分割した各要素を扱っている。URL変換テーブル２１１は、分割した一番目の先頭要素で、URLの先頭から「？」の直前までの部分を扱っている。パラメタ変換テーブル２１２は「？」の直後から「＝」の直前までのパラメタ要素を扱っている。値変換テーブル２１３は「＝」の直後の値要素を扱っている。
【００２０】
図３に、それぞれの変換テーブルの扱う要素が分割される例を示す。URLの例「http://www.hsk.co.jp/service.jsp?keyword=1&language=japanese」の中で、URLの先頭から「？」の直前までの部分「http://www.hsk.co.jp/service.jsp」が先頭要素であり、「？」や「＆」の直後から「＝」の直前までの「keyword」や「language」がパラメタ要素であり、「＝」の直後の「１」や「Japanese」が値要素である。
【００２１】
URL変換テーブル２１１、パラメタ変換テーブル２１２、及び値変換テーブル２１３は、同じテーブル構造を持つ。
【００２２】
図４は、これらの変換テーブルの構造を示す。項番４０１は、変換テーブル内のレコードを一意に決定する識別子である。keyword４０２は、URLの分割要素を表している。図４はURL変換テーブル２１１を例示したものであるので、keyword４０２の欄にはURLの先頭要素が格納されている。パラメタ変換テーブル２１２ではkeyword４０２の欄にパラメタ要素が格納され、値変換テーブル２１３ではkeyword４０２の欄に値要素が格納されることになる。出現回数４０３は、keyword４０２がクライアント１０１からサーバ１０２への転送時に利用された回数を表している。アクセス日４０４は、keyword４０２がクライアント１０１からサーバ１０２への転送時に利用された最も新しい日付を表している。圧縮word４０５は、keyword４０２に代わってクライアント１０１へ転送される文字列を表している。
【００２３】
閾値設定テーブル２１４は、URL圧縮プログラム２０８やURL伸張プログラム２０９などによる、URLの圧縮や伸張、変換テーブルのレコード削除を決定するためのパラメタが格納されている。このパラメタはシステムの管理者により予め記述されている。
【００２４】
図５に、閾値設定テーブル２１４の構造を示す。項番５０１は、テーブルレコードを一意に識別することができる番号を表している。項目名５０２は、設定する項目を一意にする名前を表している。閾値５０３は、その項目に設定されている閾値を表している。各レコードの閾値５０３にある()内の内容は、理解を助けるために便宜上、単位を記述したものである。
【００２５】
閾値設定テーブル２１４の項番１である「アクセス数」の閾値は、圧縮をはじめるために必要な出現回数の下限を表している。項番２である「keyword保持期間」の閾値は、変換テーブル中の圧縮wordの登録されていないレコードを削除するために必要な日数の下限を示している。この日数は、keywordの出現回数がカウントされなくなってからの期間を表している。項番３の「圧縮word保持期間」の閾値は、変換テーブル中の圧縮wordの登録されているレコードを削除するために必要な日数の下限を示している。この日数も、keywordの出現回数がカウントされなくなってからの期間を表している。
【００２６】
図６は、転送プログラム２０７の動作手順を示す流れ図である。
【００２７】
はじめに、プロキシ１０３は、クライアント１０１からのコンテンツ要求を受信する（ステップ６０１）。次に、コンテンツ要求のURLから接続先URLを抽出する（ステップ６０２）。
【００２８】
図７に、コンテンツ要求のURLの例を示す。この例の接続先URL７０１の中で、URLの先頭からはじめの「？」までが、プロキシ１０３を識別するプロキシURL７０２である。残りの部分は、接続先URL７０３である。ステップ６０２では、この接続先URL７０３を抽出する。
【００２９】
次に、接続先URLが抽出できたかどうかを確認する（ステップ６０３）。接続先URLを抽出することができたならば、ステップ６０４へ進む。接続先URLを抽出できなかったならば、ステップ６０８へ進む。ステップ６０４では、ステップ６０２で抽出した接続先URLをURL伸張プログラム２０９で書き換える（ステップ６０４）。次に、URL伸張プログラム２０９からの応答が１であるかどうかを調べる（ステップ６０５）。応答が１ならば、ステップ６０４で書き換えた接続先URLをURL圧縮プログラム２０８で書き換える（ステップ６０６）。さらに、ステップ６０６で書き換えた接続先URLへの転送先を表示するページを生成してクライアント１０１へ送信し（ステップ６０７）、ステップ６０１へ戻る。ステップ６０５から６０７の流れは、クライアントから要求された接続先URLが圧縮されていないkeywordを含み、該keywordが変換テーブルに既に存在し圧縮wordが割り当てられている場合に、クライアントのユーザに該圧縮されたURLを知らせる画面を表示するものである。
【００３０】
図８は、ステップ６０７で転送先を表示するページの画面例を示す。このページに表示されている転送先に、手動的あるいは自動的にページが遷移される。クライアントのユーザは、自分が要求した接続先URLに対して、この画面に示された圧縮URLが割当てられていることを知ることができ、これ以降は効率的な圧縮URLを使用できる。
【００３１】
ステップ６０３で接続先URLを抽出することができなかった場合は、クライアント１０１に接続先URLを要求するページを送信して（ステップ６０８）、ステップ６０１へ戻る。
【００３２】
図９は、ステップ６０８で表示する、クライアント１０１に接続先URLを要求するページの画面例を示す。
【００３３】
ステップ６０５でURL伸張プログラム２０９からの応答が１でない場合は、URL伸張プログラム２０９からの応答が−１（エラー）であるかどうかを調べる（ステップ６０９）。応答が−１である場合は、ステップ６０４で書き換えた接続先URLへのアクセスエラーを表示するページを生成してクライアント１０１へ送信し（ステップ６１０）、ステップ６０１へ戻る。
【００３４】
図１０は、ステップ６１０で表示する、接続先URLのエラーを表示するページの画面例を示す。
【００３５】
ステップ６０９でURL伸張プログラム２０９からの応答が−１でない場合は、URLの伸張が成功したということであるから、ステップ６０４のURL伸張プログラム２０９で書き換えた接続先URLをその接続先URLのホスト部のサーバへコンテンツ要求として送信する（ステップ６１１）。
図１１に、接続先URLのホスト部の例を示す。ホスト部は、URLの「//」以降で最初の「/」までの部分文字列である。
【００３６】
ステップ６１１の後、サーバ１０２に送信したコンテンツ要求に対する返答のコンテンツを受信する（ステップ６１２）。受信したコンテンツ内にある各リンク先のURLをURL圧縮プログラム２０８で書き換える（ステップ６１３）。コンテンツ内のリンク先とは、＜A＞タグのhref属性値や＜input＞タグのaction属性値などである。さらに、ステップ６１３で書き換えた各リンク先のURLの先頭にプロキシURL７０２を付加する（ステップ６１４）。プロキシURL７０２（図７）とは、プロキシ１０３に接続することができるURLを表しており、クライアント１０１が必ずプロキシ１０３経由でサーバ１０２に接続するようにしている。ステップ６１４までで書き換えたコンテンツをクライアント１０１に転送し（ステップ６１５）、ステップ６０１へ戻る。
【００３７】
図１２は、URL圧縮プログラム２０８の動作手順を示す流れ図である。この処理では、接続先URLを１文字づつ調べながら「&」や「?」などの分割の区切りになる文字を見つけ、それらで分割された文字列に対して変換ルーチンを施して圧縮を行う。以下、この処理の詳細を説明する。
【００３８】
転送プログラム２０７から接続先URLを取得し、変数inURLに接続先URLを代入する（ステップ１２０１）。変数iに1を代入し、変数outURLを空にする（ステップ１２０２）。変数startに変数iの値を代入し、変数keyを空にする（ステップ１２０３）。
【００３９】
次に、変数inURL[i]が文字「&」と等しいかどうかを調べる（ステップ１２０４）。これは、変数inURL[i]が接続先URLの要素分割文字列であるかの確認である。ここで、表記X[Y]は、変数Xの文字列のY番目の文字を表している。変数inURL[i]が文字「&」と等しい場合、変数keyには値が設定されていると考えられるので、この変数keyを値要素として処理するために、値変換ルーチンを実行する（ステップ１２０５）。値変換ルーチンについては後述する。次に、変数outURLの文字列の後尾に変数inURL[i]を表す文字列を追加し、変数iを1増やして（ステップ１２０６）、ステップ１２０３に戻る。
【００４０】
なお、変数inURL[i]を表す文字列とは、基本的には変数inURL[i]の文字そのものである。ただし、変数inURL[i]の文字をそのまま使用すると、URL規格外のコンテンツ要求のURL７０１が作成される場合は、エスケープ文字列に変換して使用する。ここで、エスケーブ文字列に変換された文字は、プロキシ１０３がクライアント１０１から受信して、接続先URLとして取得されたときに、元の文字表記に変わる。
【００４１】
ステップ１２０４で変数inURL[i]が文字「&」と等しくない場合は、変数inURL[i]が文字「?」あるいは文字「;」と等しいかどうかを調べる（ステップ１２０７）。これは、変数inURL[i]が接続先URLの要素分割文字列であるかの確認である。変数inURL[i]が文字「?」あるいは文字「;」と等しい場合、変数startが1であるかどうかを調べる（ステップ１２０８）。これは、現在の処理が先頭要素に対する処理であるか否かの確認である。変数startが1なら、変数keyを先頭要素として処理するために、URL変換ルーチンを実行し（ステップ１２０９）、ステップ１２０６に進む。URL変換ルーチンについては後述する。変数startが1でないなら、ステップ１２０５に進む。
【００４２】
ステップ１２０７で変数inURL[i]が文字「?」あるいは文字「;」と等しくない場合は、変数inURL[i]が文字「=」と等しいかどうかを調べる（ステップ１２１０）。これは、変数inURL[i]が接続先URLの要素分割文字列であるかの確認である。変数inURL[i]が文字「=」と等しい場合、変数startが1であるかどうかを調べる（ステップ１２１１）。これは、現在の処理が先頭要素に対する処理であるか否かの確認である。変数startが1なら、変数keyを先頭要素として処理するために、URL変換ルーチンを実行し（ステップ１２０９）、ステップ１２０６に進む。変数startが1でないなら、変数keyをパラメタ要素として処理するために、パラメタ変換ルーチンを実行し（ステップ１２１２）、ステップ１２０６に進む。パラメタ変換ルーチンについては後述する。
【００４３】
ステップ１２１０で変数inURL[i]が文字「=」と等しくない場合は、変数inURL[i]が空であるかどうかを調べる（ステップ１２１３）。これは、変数inURLの文字列の最後まで来たかの確認である。変数inURL[i]が空の場合、変数startが1であるかどうかを調べる（ステップ１２１４）。これは、現在の処理が先頭要素に対する処理であるか否かの確認である。変数startが1であるときは、変数keyを先頭要素として処理するために、URL変換ルーチンを実行する（ステップ１２１５）。そして、転送プログラム２０７の接続先URLを変数outURLの値に書き換えて（ステップ１２１６）、終了する。
【００４４】
ステップ１２１４で変数startが1でないなら、変数keyを値要素として処理するために、値変換ルーチンを実行し（ステップ１２１７）、ステップ１２１６に進む。
【００４５】
ステップ１２１３で変数inURL[i]が空でない場合は、変数inURL[i]が文字「!」と等しいかどうかを調べる（ステップ１２１８）。これは、URLに利用されている文字「!」を識別して、文字列「!!」に置き換えるためである。すなわち、２つ続く「!」で通常の文字「!」の１文字を表す。本実施の形態では、文字「!」を特殊文字（これに続く文字が圧縮されたものであることを示す）として利用するため、通常の文字「!」と区別する必要がある。変数inURL[i]が文字「!」と等しいなら、変数keyの文字列の後尾に文字「!」を追加し（ステップ１２１９）、ステップ１２２０に進む。なお、表記Add(X,Y)は、変数Xの文字列に、変数Yの文字あるいは文字列を追加することを表している。ステップ１２１８で変数inURL[i]が文字「!」と等しくない場合は、直ちにステップ１２２０に進む。次に、変数keyの文字列の後尾にinURL[i]の文字を追加して、変数iを1増やし（ステップ１２２０）、ステップ１２０４に戻る。
【００４６】
次に、図１３を参照して、図１２の圧縮処理で呼出している変換ルーチンの動作手順を説明する。なお、図１２におけるURL変換ルーチンとパラメタ変換ルーチンと値変換ルーチンは、動作手順が同じであるので、図１３でまとめて説明するものとする。ただし、URL変換ルーチンは変換テーブルとしてURL変換テーブル２１１を、パラメタ変換ルーチンは変換テーブルとしてパラメタ変換テーブル２１２を、値変換ルーチンは変換テーブルとして値変換テーブル２１３を、それぞれ参照する。これらの変換テーブルについては図４で説明した。
【００４７】
まず、変換テーブルからkeyword列が変数keyであるレコードを検索する（ステップ１３０１）。ステップ１３０１で検索したレコードがあるかどうかを調べる（ステップ１３０２）。これは、変換レコードに変数keyに関連する要素があるかの確認である。そのようなレコードがあるときは、当該レコードの圧縮wordフィールドに値が格納されているかどうかを調べる（ステップ１３０３）。これは、変数keyが圧縮可能であるかの確認である。圧縮wordフィールドに値があれば、変数keyに圧縮wordフィールドの値を代入する（ステップ１３０４）。次に、変数outURLに文字「!」を追加する（ステップ１３０５）。また、変数outURLに変数keyの文字列を追加して（ステップ１３０６）、終了する。
【００４８】
ステップ１３０２で検索したレコードがない場合、あるいはステップ１３０３で圧縮wordフィールドに値がない場合は、直ちにステップ１３０６に進み、変数outURLに変数keyの文字列を追加して、終了する。
【００４９】
図１４は、図６の転送プログラム２０７から呼び出されるURL伸張プログラム２０９の動作手順を示す流れ図である。この処理では、URL圧縮の逆を行っている。すなわち、接続先URLを１文字づつ調べながら「&」や「?」などの分割の区切りになる文字を見つけ、それらで分割された文字列に対して逆変換ルーチンを施して伸張を行う。以下、この処理の詳細を説明する。
【００５０】
転送プログラム２０７から接続先URLを取得し、変数inURLに接続先URLを代入する（ステップ１４０１）。変数iに1を代入し、変数returnを0にし、変数outURLを空にする（ステップ１４０２）。変数startに変数iの値を代入し、変数keyを空にする（ステップ１４０３）。
【００５１】
次に、変数inURL[i]が文字「&」と等しいかどうかを調べる（ステップ１４０４）。これは、変数inURL[i]が接続先URLの要素分割文字列であるかの確認である。変数inURL[i]が文字「&」と等しいときは、変数keyを値要素として処理するために、値逆変換ルーチンを実行する（ステップ１４０５）。値逆変換ルーチンについては後述する。次に、変数outURLの文字列の後尾にinURL[i]の文字を追加し、変数iを1増やして（ステップ１４０６）、ステップ１４０３に戻る。
【００５２】
ステップ１４０４で変数inURL[i]が文字「&」と等しくない場合は、変数inURL[i]が文字「?」あるいは文字「;」と等しいかどうかを調べる（ステップ１４０７）。これは、変数inURL[i]が接続先URLの要素分割文字列であるかの確認である。変数inURL[i]が文字「?」あるいは文字「;」と等しいときは、変数startが1であるかどうかを調べる（ステップ１４０８）。これは、現在の処理が先頭要素に対する処理であるか否かの確認である。変数startが1なら、変数keyを先頭要素として処理するために、URL逆変換ルーチンを実行し（ステップ１４０９）、ステップ１４０６に進む。URL逆変換ルーチンについては後述する。変数startが1でないなら、ステップ１４０５に進む。
【００５３】
ステップ１４０７で変数inURL[i]が文字「?」あるいは文字「;」と等しくない場合は、変数inURL[i]が文字「=」と等しいかどうかを調べる（ステップ１４１０）。これは、変数inURL[i]が接続先URLの要素分割文字列であるかの確認である。変数inURL[i]が文字「=」と等しいときは、変数startが1であるかどうかを調べる（ステップ１４１１）。これは、現在の処理が先頭要素に対する処理であるか否かの確認である。変数startが1なら、変数keyを先頭要素として処理するために、ステップ１４０９へ進む。変数startが1でないなら、変数keyをパラメタ要素として処理するために、パラメタ逆変換ルーチンを実行し（ステップ１４１２）、ステップ１４０６に進む。パラメタ逆変換ルーチンについては後述する。
【００５４】
ステップ１４１０で変数inURL[i]が文字「=」と等しくない場合は、変数inURL[i]が空であるかどうかを調べる（ステップ１４１３）。これは、変数inURLの文字列の最後まで来たかの確認である。変数inURL[i]が空であるときは、変数startが1であるかどうかを調べる（ステップ１４１４）。これは、現在の処理が先頭要素に対する処理であるか否かの確認である。変数startが1である場合は、変数keyを先頭要素として処理するために、URL逆変換ルーチンを実行する（ステップ１４１５）。次に、変数returnが-1(エラー)でないことを調べる（ステップ１４１６）。これは、逆変換のエラーがあったかの確認である。変数returnが-1でないなら、転送プログラム２０７の接続先URLを変数outURLの値に書き換える（ステップ１４１７）。そして、転送プログラム２０７に変数returnの値を返して（ステップ１４１８）、終了する。
【００５５】
ステップ１４１６で変数returnが-1であるときは、転送プログラム２０７に変数returnの値を返して（ステップ１４１８）、終了する。また、ステップ１４１４で変数startが1でないなら、変数keyを値要素として処理するために、値逆変換ルーチンを実行し（ステップ１４１９）、ステップ１４１７に進む。
【００５６】
ステップ１４１３で変数inURL[i]が空でない場合は、変数keyの文字列の後尾にinURL[i]の文字を追加し、変数iを1増やして（ステップ１４２０）、ステップ１４０４に戻る。
【００５７】
次に、図１５を参照して、図１４の伸張処理で呼出している逆変換ルーチンの動作手順を説明する。なお、図１４におけるURL逆変換ルーチンとパラメタ逆変換ルーチンと値逆変換ルーチンは、動作手順が同じであるので、図１５でまとめて説明するものとする。ただし、URL逆変換ルーチンは変換テーブルとしてURL変換テーブル２１１を、パラメタ逆変換ルーチンは変換テーブルとしてパラメタ変換テーブル２１２を、値逆変換ルーチンは変換テーブルとして値変換テーブル２１３を、それぞれ参照する。
【００５８】
まず、変数iに1を代入する（ステップ１５０１）。変数key[i]が文字「!」と等しいかどうかを調べる（ステップ１５０２）。これは、圧縮用の特殊文字「!」が使われているかを確認する処理である。変数key[i]が文字「!」と等しいときは、変数iを1増やして（ステップ１５０３）、ステップ１５０２へ戻る。ステップ１５０２で変数key[i]が文字「!」と等しくないなら、変数iを2で割った数の整数部分の個数だけ文字「!」を、変数tmpに代入する（ステップ１５０４）。これは通常文字の「!」を再現しているものである。ステップ１５０４の時点では、iが偶数なら変数keyの先頭から奇数個の文字「!」が検出されたことになり、iが奇数なら変数keyの先頭から偶数個の文字「!」が検出されたことになる。
【００５９】
次に、変数keyに変数key[i]以降の文字列を代入する（ステップ１５０５）。例えば、変数iが2で変数key="!abc"の場合には、"abc"だけが変数keyに代入される。変数tmpの文字列の後尾に変数keyの文字列を連結し、その値を変数keyに代入する（ステップ１５０６）。
【００６０】
変数iが偶数であるかどうかを調べる（ステップ１５０７）。これは、変数keyに特殊文字「!」が含まれているかを確認する処理である。変数iが偶数である場合は、圧縮を示す特殊文字「!」が含まれているということであるから、変換テーブルから圧縮word列が変数keyであるレコードを検索する（ステップ１５０８）。ステップ１５０８で検索したレコードがあるかどうかを調べる（ステップ１５０９）。これは、変換テーブルに変数keyに関連する要素があるか否かの確認である。あれば、ステップ１５１０へ進む。ここでは、発見したレコードの項番をxとする。検索したレコードがなければ、ステップ１５２１へ進む。
【００６１】
ステップ１５１０では、項番xの出現回数フィールドの値を1つ増やし、アクセス日フィールドの値を現在の日付に変更する（ステップ１５１０）。ここで、表記Y(X)は、項番XのフィールドYの値を表している。次に、変数keyに項番xのkeywordフィールドの値を代入する（ステップ１５１１）。また、変数outURLの文字列に変数keyの文字列を追加して（ステップ１５１２）、終了する。ステップ１５０９で、検索したレコードがない場合は、変数returnに-1(エラー)を代入して（ステップ１５２１）、終了する。
【００６２】
ステップ１５０７で変数iが偶数ではない、すなわち変数iが奇数であるなら、圧縮を示す特殊文字「!」が含まれていないということであるから、変換テーブルからkeyword列が変数keyであるレコードを検索する（ステップ１５１３）。ステップ１５１３で検索したレコードがあるかどうかを調べる（ステップ１５１４）。これは、変換テーブルに変数keyに関連する要素があるか否かの確認である。あれば、ステップ１５１５へ進む。ここでは、発見したレコードの項番をxとする。検索したレコードがなければ、ステップ１５１９へ進む。
【００６３】
ステップ１５１５では、項番xのレコードの圧縮wordフィールドに要素があるかどうかを調べる（ステップ１５１５）。これは、変数keyの文字列に対して既に圧縮が行われ圧縮wordがあるのかを確認する処理である。項番xのレコードの圧縮wordフィールドに要素があれば、圧縮wordがあるということだから、変数returnに1を代入し（ステップ１５２０）、ステップ１５１６へ進む。ステップ１５１５で項番xのレコードの圧縮wordフィールドに要素がなければ、ステップ１５１６へ進む。
【００６４】
次に、項番xの出現回数フィールドの値を1つ増やし、アクセス日フィールドの値を現在の日付に変更する（ステップ１５１６）。項番xの出現回数フィールドの値が、閾値テーブル２１４のアクセス数の値を超えているかどうか調べる（ステップ１５１７）。これは、変数keyを圧縮するかどうかを決める処理である。項番xの出現回数フィールドの値が閾値テーブル２１４のアクセス数の値を超えている場合、圧縮割当てルーチンを実行して（ステップ１５１８）、ステップ１５１２へ進む。圧縮割当てルーチンについては、後述する。
【００６５】
ステップ１５１４で検索したレコードがない場合は、変換テーブルに新しいレコードを追加する（ステップ１５１９）。追加したレコードの項番には、変換テーブルの既存の項番の値と重複しない、最も小さい数を代入する。この値をxとする。追加したレコードのkeyword(x)フィールドには変数keyの値を、出現回数(x)フィールドには0を代入する。圧縮wordは空にする。そして、ステップ１５１６へ進む。
【００６６】
次に、図１６を用いて、図１５のステップ１５１８で呼び出される圧縮割当てルーチンの動作手順を説明する。このルーチン内で利用されている変換テーブルは、呼び出し元がURL逆変換ルーチンのときはURL変換テーブル２１１を、パラメタ逆変換ルーチンのときはパラメタ変換テーブル２１２を、値逆変換ルーチンのときは値変換テーブル２１３を、それぞれ示すものとする。
【００６７】
変換テーブルから圧縮wordが空でないレコードを抽出する（ステップ１６０１）。新しく生成する圧縮wordの文字列数が、ステップ１６０１で抽出したすべてのレコードのどの圧縮wordフィールドの文字列数よりも長いかを調べる（ステップ１６０２）。新しく生成する圧縮wordの文字列が長ければ、ステップ１６０３へ進む。そうでなければ、ステップ１６０７へ進む。なお、ステップ１６０２で用いる新しい圧縮wordは、定められた文字集合の組み合わせで生成するものとする。この生成順序は文字数が小さい順に行うものとする。例えば、１文字で１，２，…の順に９まで割当て、その次に２文字で１０，１１，…と割当てていくような生成方法でよい。
【００６８】
ステップ１６０３では、圧縮wordの文字数が最小、かつ、現在の日付から閾値設定テーブル２１４の圧縮word保持期間だけ遡った日よりも古いアクセス日フィールドの値を持つレコードを、ステップ１６０１で抽出したレコードの中から検索する（ステップ１６０３）。ステップ１６０３で検索したレコードがあるかどうかを調べる（ステップ１６０４）。これは、変換テーブルに、決められた期間以上利用されていない圧縮wordを持つレコードがないのかを確認する処理である。検索したレコードがあれば、ステップ１６０５へ進む。ここでは、発見したレコードの項番はyとする。検索したレコードがなければ、ステップ１６０７へ進む。
【００６９】
ステップ１６０５では、圧縮word(x)に圧縮word(y)の文字列を代入する。次に、変換テーブルから項番yのレコードを削除して（ステップ１６０６）、終了する。
【００７０】
ステップ１６０２で新しく生成する圧縮wordの文字列が、ステップ１６０１で抽出したすべてのレコード中の圧縮wordの最長文字列よりも長くない場合、またはステップ１６０４で検索したレコードがない場合は、圧縮word(x)にステップ１６０２で生成した新しい圧縮wordを代入して（ステップ１６０７）、終了する。
【００７１】
次に、図１７の流れ図を用いてガベージコレクションプログラム２１０の動作手順を説明する。このプログラムは、全ての変換テーブル（URL変換テーブル２１１、パラメタ変換テーブル２１２、値変換テーブル２１３）を対象に定期的に実行するものである。
【００７２】
変換テーブルから圧縮wordが空であるレコードを抽出する（ステップ１７０１）。現在の日付から閾値設定テーブル２１４のkeyword保持期間だけ遡った日よりも古いアクセス日フィールドの値を持つレコードを、ステップ１７０１で抽出したレコードから抽出する（ステップ１７０２）。ステップ１７０２で抽出したレコードを削除して（ステップ１７０３）、終了する。
【００７３】
なお、上記実施の形態では、URLを分割した各分割要素について圧縮と伸張を行っているが、URLを単位として圧縮・伸張を行うようにしてもよい。
【００７４】
【発明の効果】
以上説明したように、本発明によれば、World Wide WebのようなURLを利用するデータ配信システムにおいて、アクセスの集中するページのURLを統計情報に基づいて効率的に圧縮することができる。また、アクセスの少なくなったページに割当てられていた圧縮URLを、アクセスの多くなったページの圧縮URLに再割当てすることができる。さらに、クライアントが非圧縮URLへのリンクを記録して、その後プロキシがそのリンクを圧縮した場合、クライアントが記録している非圧縮URLで直接アクセスしても、プロキシが圧縮されたURLを通知するので、より効率的なURLをクライアントに知らせることができる。また、分割要素に分けて圧縮・伸張するので、セッション情報が付加されたリンク先のURLであっても、そのセッション情報以外の部分については圧縮URLを利用できるので、効率的な利用が可能である。
【図面の簡単な説明】
【図１】本発明の実施の形態の利用環境を示す図である。
【図２】システム全体の構成を示すシステム構成図である。
【図３】  URLの分割の例を示す構成図である。
【図４】  URL変換テーブル・パラメタ変換テーブル・値変換テーブルの構成を示す構成図である。
【図５】閾値設定テーブルの構造を示す構成図である。
【図６】転送プログラムの動作を説明する流れ図である。
【図７】コンテンツ要求の接続先URLの例を示す構成図である。
【図８】転送時の表示画面の例を示す構成図である。
【図９】接続先URLを要求する画面の例を示す構成図である。
【図１０】エラー時の表示画面の例を示す構成図である。
【図１１】  URLのホスト部の例を示す構成図である。
【図１２】  URL圧縮プログラムの動作を説明する流れ図である。
【図１３】  URL変換ルーチン・パラメタ変換ルーチン・値変換ルーチンの動作を説明する流れ図である。
【図１４】  URL伸張プログラムの動作を説明する流れ図である。
【図１５】  URL逆変換ルーチン・パラメタ逆変換ルーチン・値逆変換ルーチンの動作を説明する流れ図である。
【図１６】圧縮割当てルーチンの動作を説明する流れ図である。
【図１７】ガベージコレクションプログラムの動作を説明する流れ図である。
【符号の説明】
１０１…クライアント、１０２…サーバ、１０３…プロキシ、１０４…ネットワーク、２０１…ＣＰＵ、２０２…メモリ、２０３…通信部、２０４…入力部、２０５…出力部、２０６…記憶部、２０７…転送プログラム、２０８…URL圧縮プログラム２０８、２０９…URL伸張プログラム、２１０…ガベージコレクションプログラム、２１１…URL変換テーブル、２１２…パラメタ変換テーブル、２１３…値変換テーブル、２１４…閾値設定テーブル、２１５…バス。
【図１】
0003916219.tif 000002
【図２】
0003916219.tif 000003
【図３】
0003916219.tif 000004
【図４】
0003916219.tif 000005
【図５】
0003916219.tif 000006
【図６】
0003916219.tif 000007
【図７】
0003916219.tif 000008
【図８】
0003916219.tif 000009
【図９】
0003916219.tif 000010
【図１０】
0003916219.tif 000011
【図１１】
0003916219.tif 000012
【図１２】
0003916219.tif 000013
【図１３】
0003916219.tif 000014
【図１４】
0003916219.tif 000015
【図１５】
0003916219.tif 000016
【図１６】
0003916219.tif 000017
【図１７】
0003916219.tif 000018