以下に添付図面を参照して、この発明にかかる中継装置、中継方法、および中継プログラムの好適な実施の形態を詳細に説明する。なお、本明細書において、中継装置は中継サーバである。また、リクエスト元のアクセス状態を識別するための状態データを「クッキー」と表記する。
(実施の形態1)
まず、実施の形態1にかかるネットワークシステムのシステム構成について説明する。図1は、ネットワークシステムのシステム構成の一例を示す説明図である。ネットワークシステム100では、クライアント端末101と、中継サーバ102と、目的サーバ103〜105と、がインターネット、LAN(Local Area Network)、WAN(Wide Area Network)などのネットワーク150を介して相互に通信可能に接続されている。
クライアント端末101は、クッキーDB(データベース)110を備え、各目的サーバ103〜105から提供される情報(たとえば、Webページ)を閲覧するためのブラウザを有する。クッキーDB110は、レスポンスに付加されているクッキーを保持する記憶装置である。ただし、クッキーDB110には、1サーバに対して予め定められた数(たとえば、50個)を限度としてクッキーが保持される。
中継サーバ102は、クッキーDB120を備え、クライアント端末101と各目的サーバ103〜105との通信を中継する機能を有する。具体的には、たとえば、中継サーバ102は、クライアント端末/目的サーバ間のデータを、中継サーバ102経由でアクセス可能な形式に変換して中継する。なお、クッキーDB120の記憶内容については図6を用いて後述する。
目的サーバ103〜105は、サービス提供用のサーバであり、たとえば、クライアント端末101のブラウザからの要求に応じてHTML(HyperText Markup Language)文書や画像などの情報を提供するWebサーバである。
ネットワークシステム100では、ユーザはクライアント端末101から中継サーバ102を介して各目的サーバ103〜105にアクセスする。そして、ネットワークシステム100では、他のサービス(システム)と連携可能に設計されていない各目的サーバ103〜105の入出力を、中継サーバ102で加工して連携可能な入出力に置き換えることにより、サービス間連携を実現する。
また、ネットワークシステム100では、クライアント端末101が、中継サーバ102経由で各目的サーバ103〜105にアクセスする。このため、ユーザには、各目的サーバ103〜105のURLではなく、特殊な加工を施したURLを指定させることになる。
(本中継手法の一実施例)
つぎに、本中継手法の一実施例について説明する。図2は、本中継手法の一実施例を示す説明図である。ここでは、クライアント端末101が中継サーバ102を介して目的サーバ103にアクセスする場合を例に挙げて、本中継手法の一実施例を説明する。
(1)クライアント端末101が、目的サーバ103に対するリクエスト201を中継サーバ102に送信する。ここで、リクエスト先のURLは、中継サーバ102経由で目的サーバ103にアクセス可能な形式に変換されている。なお、URLの変換方法については図3を用いて後述する。
(2)中継サーバ102が、クライアント端末101からリクエスト201を受信し、リクエスト先のURLを目的サーバ103に送信可能な形式に復元するとともに、リクエスト201を加工する。なお、URLの復元方法については図4を用いて後述する。また、リクエストの加工方法については図19〜図21を用いて後述する。
(3)中継サーバ102が、復元後のURLを用いて、リクエスト202(加工後)を目的サーバ103に送信する。
(4)目的サーバ103が、中継サーバ102からリクエスト202を受信し、リクエスト202に対するレスポンス203を中継サーバ102に送信する。ここで、レスポンス203には、リクエスト元のユーザ(ブラウザ)を識別するためのクッキー204が付加されている。
(5)中継サーバ102が、目的サーバ103からレスポンス203を受信し、レスポンス203に含まれているクッキー204を抽出してクッキーDB120に登録する。
(6)中継サーバ102が、クッキー204を、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式に変換するとともに、レスポンス203を加工する。なお、クッキーの変換方法については図12を用いて後述する。また、レスポンスの加工方法については図22〜図25を用いて後述する。
(7)中継サーバ102が、変換後のクッキー205が付加されたレスポンス206(加工後)をクライアント端末101に送信する。
(8)クライアント端末101が、中継サーバ102からレスポンス206を受信し、レスポンス206に付加されているクッキー205をクッキーDB110に登録する。
ここで、クライアント端末101では、中継サーバ102から取得したクッキーの合計が1サーバに対する保持制限を超えて、クッキーDB110からクッキー205が削除されたとする。
(9)クライアント端末101が、目的サーバ103に対するリクエスト207を中継サーバ102に送信する。ただし、クッキーDB110からクッキー205が削除されているため、本来付加すべきクッキー205がリクエスト207から欠落している。
(10)中継サーバ102が、クライアント端末101からリクエスト207を受信し、上記(2)と同様に、リクエスト先のURLを復元するとともにリクエスト207を加工する。
(11)中継サーバ102が、リクエスト208(加工後)から欠落しているクッキー204をクッキーDB120の中から検索する。
(12)中継サーバ102が、検索されたクッキー204をリクエスト208に付加して目的サーバ103に送信する。
このように、本中継手法によれば、中継サーバ102において、リクエスト207から欠落しているクッキー205(204)を補完して目的サーバ103に転送することができる。これにより、クライアント端末101のブラウザ側のクッキーの保持制限による問題を回避して、目的サーバ103側での処理を正常に行なえるようになる。
(URLの変換方法)
ここで、中継サーバ102経由で各目的サーバ103〜105にアクセス可能な形式にリクエスト先のURLを変換する変換方法について説明する。図3は、URLの変換処理手順の一例を示すフローチャートである。なお、ここでは一例として、URLを変換する実行主体を中継サーバ102とする。
中継サーバ102により、変換対象のURLからプロトコル、FQDNおよびポート番号の文字列を抽出する(ステップS301)。ただし、ポート番号については省略されている場合を除く。なお、URLは予め定められたフォーマットで記述されている。そのため、中継サーバ102は、そのフォーマットにしたがってURLを読み込むことで、プロトコル、FQDNおよびポート番号の文字列を認識できる。
中継サーバ102により、FQDN文字列にハイフンが含まれているか否かを判断する(ステップS302)。ここで、ハイフンが含まれている場合(ステップS302:Yes)、そのハイフンを、ハイフン2つに置換する(ステップS303)。一方、ハイフンが含まれていない場合(ステップS302:No)、ステップS304に移行する。
中継サーバ102により、FQDN文字列(ハイフン置換後)のドットをハイフンに置換する(ステップS304)。中継サーバ102により、ステップS301において抽出されたプロトコル文字列(http、httpsなど)を、FQDN文字列(ドット置換後)の前にハイフンで連結する(ステップS305)。
中継サーバ102により、ステップS301においてポート番号文字列が抽出されたか否かを判断する(ステップS306)。ここで、ポート番号文字列が抽出されている場合(ステップS306:Yes)、ステップS305において生成された文字列の後ろにハイフン2つで連結する(ステップS307)。一方、ポート番号文字列が未抽出の場合(ステップS306:No)、ステップS308に移行する。
中継サーバ102により、ステップS305またはステップS307において生成された文字列をホスト名として、中継サーバ102のドメインに付加する形で、URLを生成する(ステップS308)。
これにより、各目的サーバ103〜105のURLを、クライアント端末101が中継サーバ102を介して各目的サーバ103〜105にアクセス可能なURLに変換することができる。なお、URLの変換方法として、上述した変換方法のほか、CGIパラメタを使用した方式やパスを使用した方式などを用いることにしてもよい。
(URLの復元方法)
つぎに、図3に示した変換方法により変換されたURLを、元のURLに復元する復元方法の一例について説明する。図4は、URLの復元処理手順の一例を示すフローチャートである。
中継サーバ102により、復元対象のURLのホスト名文字列(FQDNの一番左側の要素)を抽出する(ステップS401)。中継サーバ102により、抽出された文字列(先頭がhttp−またはhttps−で始まる文字列)の先頭文字列をプロトコル文字列として抽出する(ステップS402)。
中継サーバ102により、ステップS401において抽出された文字列の末尾がハイフン2つに続く数字列となっているか否かを判断する(ステップS403)。ここで、末尾が数字列となっている場合(ステップS403:Yes)、その数字列をポート番号文字列として抽出する(ステップS404)。一方、末尾が数字列となっていない場合(ステップS403:No)、ポート番号文字列の抽出を省略する。
中継サーバ102により、ステップS401において抽出された文字列から、ステップS402およびステップS403の解釈に用いた先頭および末尾の文字列を削除する(ステップS405)。中継サーバ102により、削除後の文字列のハイフンをすべてドットに置換してFQDN文字列を生成する(ステップS406)。
中継サーバ102により、ステップS406において生成された文字列に2つ連続するドットがあるか否かを判断する(ステップS407)。ここで、ドットが2つ連続する場合(ステップS407:Yes)、その2つのドットを1つのハイフンに置換してFQDN文字列を生成する(ステップS408)。一方、2つ連続するドットがない場合(ステップS407:No)、ステップS409に移行する。
中継サーバ102により、ステップS402において抽出されたプロトコル文字列、ステップS406またはステップS408において生成されたFQDN文字列、およびステップS404において抽出されたポート番号文字列を用いて、URLを生成する(ステップS409)。
これにより、図3に示した変換方法により変換されたURLを、中継サーバ102が各目的サーバ103〜105に送信可能な形式に復元することができる。
(中継サーバのハードウェア構成)
つぎに、中継サーバ102のハードウェア構成について説明する。図5は、中継サーバのハードウェア構成を示すブロック図である。図5において、中継サーバ102は、CPU(Central Processing Unit)501と、ROM(Read‐Only Memory)502と、RAM(Random Access Memory)503と、磁気ディスクドライブ504と、磁気ディスク505と、光ディスクドライブ506と、光ディスク507と、I/F(Interface)508と、操作パネル509と、を備えている。また、各構成部はバス500によってそれぞれ接続されている。
ここで、CPU501は、中継サーバ102の全体の制御を司る。ROM502は、ブートプログラムなどのプログラムを記憶している。RAM503は、CPU501のワークエリアとして使用される。磁気ディスクドライブ504は、CPU501の制御にしたがって磁気ディスク505に対するデータのリード/ライトを制御する。磁気ディスク505は、磁気ディスクドライブ504の制御で書き込まれたデータを記憶する。
光ディスクドライブ506は、CPU501の制御にしたがって光ディスク507に対するデータのリード/ライトを制御する。光ディスク507は、光ディスクドライブ506の制御で書き込まれたデータを記憶したり、光ディスク507に記憶されたデータをコンピュータに読み取らせたりする。
インターフェース(以下、「I/F」と略する。)508は、通信回線を通じてLAN、WAN、インターネットなどのネットワーク150に接続され、このネットワーク150を介して他の装置に接続される。そして、I/F508は、ネットワーク150と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。I/F508には、たとえばモデムやLANアダプタなどを採用することができる。
操作パネル509は、文字、数字、各種指示などの入力のためのキーを備え、データの入力をおこなう。また、タッチパネル式の入力パッドやテンキーなどであってもよい。なお、ここでは中継サーバ102のハードウェア構成について説明したが、クライアント端末101および目的サーバ103〜105についても同様のハードウェア構成により実現できる。
(クッキーDBの記憶内容)
つぎに、中継サーバ102が備えるクッキーDB120の記憶内容について説明する。図6は、クッキーDBの記憶内容の一例を示す説明図である。図6において、クッキーDB120は、クライアントID、セッションID、ドメイン名、パス名、クッキー名、クッキー値、有効期限およびセキュアフラグのフィールドを有する。各フィールドに情報を設定することで、クッキー情報600−1〜600−6がレコードとして記憶されている。
ここで、クライアントIDとは、ユーザ(ブラウザ)の識別子であり、たとえば、後述する端末識別用のクッキーの値である。セッションIDとは、セッションの識別子であり、たとえば、後述するセッション識別用のクッキーの値である。ドメイン名とは、リクエスト先のドメイン名である。パス名とは、リクエスト先のパス名である。なお、ドメイン名はネットワーク150上でのコンピュータの住所(名前)を示し、パス名はリクエスト対象となるデータの格納場所を示す。
クッキー名とは、クッキーの名前である。クッキー値とは、クッキーの値である。有効期限とは、クッキーの有効期限である。セキュアフラグとは、SSL(Secure Socket Layer)通信時に指定するフラグである。ここでは、SSL通信にのみクッキーを送信する場合に有効が設定され、SSL通信でなくても送信する場合に無効が設定される。
(中継サーバの機能的構成)
つぎに、中継サーバ102の機能的構成について説明する。図7は、中継サーバの機能的構成を示すブロック図である。図7において、中継サーバ102は、要求受信部701と、要求解釈部702と、クッキー復元部703と、第1付加部704と、判定部705と、検索部706と、セッション管理部707と、要求送信制御部708と、要求送信部709と、応答受信部710と、抽出部711と、登録部712と、応答解釈部713と、クッキー変換部714と、第2付加部715と、コード置換部716と、応答変換部717と、応答送信制御部718と、応答送信部719と、を含む構成である。
この制御部となる機能(要求受信部701〜応答送信部719)は、具体的には、たとえば、図5に示したROM502、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶されたプログラムをCPU501に実行させることにより、または、I/F508により、その機能を実現する。なお、以降の説明において、特に指定する場合を除いて、目的サーバ103〜105を単に「目的サーバ103」と表記する。
要求受信部701は、クライアント端末101からリクエストを受信する機能を有する。ここで、リクエストとは、たとえば、目的サーバ103のWebサイトにWebページを要求するためのHTTP(HyperText Transfer Protocol)リクエスト(図8参照)である。
リクエストの宛先は、たとえば、上述した変換方法(図3参照)により、中継サーバ102を経由してクライアント端末101から目的サーバ103にアクセス可能な形式に変換されている。なお、受信されたリクエストは、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。
図8は、リクエストの一例を示す説明図である。ここで、リクエストは、予め定められたフォーマットにしたがって記述されている。図8において、リクエスト800は、リクエスト行810とリクエストヘッダ820とリクエストボディ830を有する。リクエスト行810には、メソッド、パス名、バージョンなどが記述される。リクエストヘッダ820には、ブラウザ側でサポートするデータのタイプ、データ圧縮の方法、ブラウザの種類、クッキーなどが記述される。リクエストボディ830には、Webページの入力欄などに記入したテキストなどが記述される。
ここで、リクエストヘッダ820には、クッキー821〜824が記述されている。クッキー821は、クッキー名『_client_id』、クッキー値『ab23456d』の端末識別用のクッキーである。クッキー822は、クッキー名『_session』、クッキー値『true』のセッション識別用のクッキーである。なお、端末識別用およびセッション識別用のクッキーについての詳細な説明は後述する。また、クッキー823,824は、あるWebサイトで使用するクッキーであり、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式に変換されている。
図7の説明に戻り、要求解釈部702は、受信されたリクエストの宛先を復元する機能を有する。ここで、リクエストの宛先は、リクエスト先のURLであり、クライアント端末101が中継サーバ102経由で目的サーバ103にアクセス可能な形式に変換されている。
具体的には、たとえば、要求解釈部702が、図4に示した復元方法により、リクエストの宛先を、目的サーバ103に送信可能な形式に復元する。復元された復元結果は、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。なお、URLの復元例については図11を用いて後述する。
また、要求解釈部702は、リクエストを加工する機能を有する。ここで、リクエストは、クライアント端末101が中継サーバ102を経由して目的サーバ103にアクセス可能な形式に変換されている。そこで、要求解釈部702が、目的サーバ103が認識可能な形式にリクエストを加工する。加工された加工結果は、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。なお、リクエストの加工例については図19〜図21を用いて後述する。
クッキー復元部703は、リクエストに含まれているクッキーを復元する機能を有する。ここで、リクエストに含まれているクッキーは、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式に変換されている。このため、クッキー復元部703が、目的サーバ103が認識可能な形式にクッキーを復元する。なお、クッキーの復元例については図13を用いて後述する。
第1付加部704は、復元されたクッキーをリクエストに付加する機能を有する。具体的には、たとえば、第1付加部704が、リクエストヘッダに含まれている復元前のクッキーを、復元後のクッキーに置き換える。また、第1付加部704は、後述する判定部705の判定結果に基づいて、復元後のクッキーを付加することにしてもよい。
判定部705は、復元されたクッキーのドメイン名が、リクエスト先のURLに含まれるドメイン名と一致、または、上位のドメイン名となっているか否かを判定する機能を有する。ここで、リクエスト先のURLに含まれるドメイン名を『www.example.com』とする。この場合、このドメイン名の上位のドメイン名は『example.com』または『.com』となる。ただし『.com』はトップレベルドメインであるため不可である。
また、判定部705は、復元されたクッキーのパス名が、リクエスト先のURLに含まれるパス名と先頭一致するか否かを判定する機能を有する。ここで、リクエスト先のURLに含まれるパス名を『/aaa/bbb/index.html』とする。この場合、『/』や『/aaa/b』などと先頭一致する。
また、判定部705は、復元されたクッキーのセキュアフラグが有効、かつ、リクエストのプロトコルが暗号化用か否かを判定する機能を有する。具体的には、たとえば、判定部705が、復元されたクッキーにセキュアフラグ(S)が付加され、かつ、リクエスト先のURLに含まれるプロトコルがhttpsか否かを判定する。なお、判定された判定結果は、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。
また、上記第1付加部704は、判定結果が下記(A)〜(C)の全てを満たす場合に、復元後のクッキーをリクエストに付加することにしてもよい。
(A)復元後のクッキーのドメイン名がリクエスト先のドメイン名と一致または上位
(B)復元後のクッキーのパス名がリクエスト先のパス名と先頭一致
(C)復元後のクッキーのセキュアフラグが有効ならばリクエストのプロトコルが暗号化用
上記クッキー復元部703、第1付加部704、判定部705によれば、リクエスト先で有効となるクッキーを目的サーバ103が認識可能な形式に復元してリクエストに付加することができる。
検索部706は、リクエストの宛先に対応するクッキーをクッキーDB120の中から検索する機能を有する。具体的には、たとえば、検索部706が、クッキーDB120に登録されているクッキー群のうち、下記(D)かつ(E)のクッキーを検索することにしてもよい。
(D)ドメイン名がリクエスト先のURLに含まれるドメイン名と一致または上位となっているクッキー
(E)パス名がリクエスト先のURLに含まれるパス名と先頭一致となっているクッキー
また、検索部706は、リクエストが暗号化用のプロトコルではない場合、クッキーDB120内のクッキー群のうちセキュアフラグが有効のクッキーを検索対象から除外してもよい。なお、検索された検索結果は、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。
また、第1付加部704は、検索されたクッキーをリクエストに付加する機能を有する。具体的には、たとえば、第1付加部704が、検索されたクッキーがリクエストから欠落している場合に、そのクッキーをリクエストヘッダに付加する。すなわち、検索されたクッキーを付加することで、たとえば、クライアント端末101のブラウザの保持制限によりクッキーDB110から削除されたクッキーを補完する。なお、クッキーの補完例については図16を用いて後述する。
セッション管理部707は、クライアント端末101とのセッションを管理する機能を有する。具体的には、たとえば、セッション管理部707が、図9に示す端末対応テーブル900を用いて、クライアント端末101とのセッションを管理することにしてもよい。ここで、端末対応テーブル900の記憶内容について説明する。
図9は、端末対応テーブルの記憶内容の一例を示す説明図である。図9において、端末対応テーブル900は、セッションIDおよび端末識別クッキーのフィールドを有し、セッションごとの端末情報900−1〜900−3をレコードとして記憶している。ここで、セッションIDとは、セッションの識別子である。端末識別クッキーとは、端末識別用のクッキーの値(クライアントID)である。
セッション管理部707は、端末対応テーブル900を用いてセッションを管理することで、どのユーザ(ブラウザ)からアクセスを受け付けたのかを把握する。なお、セッション管理処理の具体的な処理内容については図27のフローチャートを用いて後述する。
要求送信部709は、リクエストを目的サーバ103に転送する機能を有する。具体的には、たとえば、要求送信制御部708が、要求送信部709を制御して、復元後のURLを用いて、復元後のクッキーが付加された加工後のリクエストを送信する。また、要求送信制御部708が、要求送信部709を制御して、復元後のURLを用いて、検索されたクッキーが付加された加工後のリクエストを送信する。
応答受信部710は、目的サーバ103からレスポンスを受信する機能を有する。ここで、レスポンスとは、たとえば、要求されたWebページのHTMLデータを含むHTTPレスポンス(図10参照)である。レスポンスには、リクエスト元のアクセス状態を識別するためのクッキーが含まれている場合がある。なお、受信されたレスポンスは、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。
図10は、レスポンスの一例を示す説明図である。ここで、レスポンスは、予め定められたフォーマットにしたがって記述されている。図10において、レスポンス1000は、ステータス行1010と、レスポンスヘッダ1020と、レスポンスボディ1030とを有する。ステータス行1010には、バージョン、ステータス・コード、説明文などが記述される。
レスポンスヘッダ1020には、目的サーバ103の種類、実際に返信するデータのタイプ、データの圧縮方法、クッキーなどが記述される。レスポンスボディ1030には、要求されたWebページのHTMLデータなどが記述される。ここで、レスポンスヘッダ1020は、クッキー1021(Set−Cookie:から始まる1行の文字列)が記述されている。
抽出部711は、受信されたレスポンスの中からクッキーを抽出する機能を有する。具体的には、たとえば、抽出部711が、レスポンス1000のレスポンスヘッダ1020の中から、Set−Cookie:から始まる1行の文字列をクッキー1021として抽出する。なお、抽出された抽出結果は、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶される。
登録部712は、抽出されたクッキーを、リクエストの宛先と関連付けてクッキーDB120に登録する機能を有する。具体的には、たとえば、登録部712が、クッキーのドメイン名が現在のドメイン名と一致または上位のドメイン名となっているか否かを判断する。ここで、ドメイン名が一致または上位の場合、登録部712が、クッキーのパス名が現在のパス名と先頭一致となっているか否かを判断する。そして、パス名が先頭一致の場合、登録部712が、クッキーに含まれるクッキー名、クッキー値、ドメイン名、パス名、有効期限およびセキュアフラグの設定状態を、クライアントIDおよびセッションIDと関連付けてクッキーDB120に登録する。
応答解釈部713は、受信されたレスポンスを加工する機能を有する。具体的には、たとえば、応答解釈部713が、クライアント端末101が中継サーバ102からのものと認識可能な形式にレスポンスを加工する。なお、レスポンスの加工例については図22〜図25を用いて後述する。
クッキー変換部714は、レスポンスに含まれているクッキーを変換する機能を有する。具体的には、たとえば、クッキー変換部714が、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式にクッキーを変換する。なお、クッキーの変換例については図12を用いて後述する。
第2付加部715は、変換されたクッキーをレスポンスに付加する機能を有する。具体的には、たとえば、第2付加部715が、レスポンスヘッダに含まれている変換前のクッキーを、変換後のクッキーに置き換える。
また、第2付加部715は、リクエストの宛先に対応するクッキーをレスポンスに付加する機能を有する。ここで、リクエストの宛先に対応するクッキーは、上記検索部706によって検索されるクッキーである。具体的には、たとえば、第2付加部715が、検索されたクッキーがレスポンスから欠落している場合に、そのクッキーをリクエストヘッダに付加する。
すなわち、リクエストに補完されたクッキーが、目的サーバ103側でレスポンスに付与されなかった場合に、そのクッキーを再度補完する。このように、以前に受け取ったクッキーもレスポンスに付加してクライアント端末101に送信することで、クッキーの保持制限により削除されたクッキーをブラウザから読めなくなることを防ぐことができる。
また、第2付加部715は、端末識別用およびセッション識別用のクッキーをレスポンスに付加する機能を有する。端末識別用およびセッション識別用のクッキーのドメイン名は、レスポンスに含まれるクッキー、すなわち、変換されたクッキーのドメイン名とは異なるものを用いる。これにより、ブラウザの保持制限によって端末識別用およびセッション識別用のクッキーが削除されることを防止できる。
また、セッション識別用のクッキーは、有効期限のないクッキー(いわゆるセッションクッキー)とする。これにより、ブラウザが新しいセッションを開始した際に、以前のセッション識別用のクッキーを使うことがないようにする。なお、端末識別用およびセッション識別用のクッキーの付加例については図15を用いて後述する。
応答送信部719は、レスポンスをクライアント端末101に送信する機能を有する。具体的には、たとえば、応答送信制御部718が、応答送信部719を制御して、変換後のクッキーが付加された加工後のレスポンスをクライアント端末101に転送する。
コード置換部716は、レスポンスボディに格納されているHTML形式のドキュメントのうち、クッキー値を参照・更新するためのコードを書き換える機能を有する。また、コード置換部716は、ドキュメント中の特定箇所に、SetCookie関数、GetCookie関数の定義を行なうJavaScriptコードを挿入する機能を有する。JavaScriptコードの置換例、挿入例については図17および図18を用いて後述する。
応答変換部717では、レスポンス(応答内容)に対して変更を行なう機能を有する。ただし、この変更は、翻訳サイトやマッシュアップ機能追加装置などの従来技術と同じであり、それぞれの用途によって異なる変更処理が行なわれるため、動作の例と説明は省略する。
(URLの復元例)
ここで、URLの復元例について説明する。図11は、URLの復元例を示す説明図である。ここでは、図8に示したリクエスト800の宛先であるURLの復元例について説明する。図11において、URL1110は、クライアント端末101から要求されたURLである。
(1)要求解釈部702が、復元対象のURL1110の中からホスト名文字列(FQDNの一番左側の要素)を抽出する。ここでは、「http://http−www−example−com.r.proxy.com/mypath」から「http−www−example−com」が抽出される。
(2)要求解釈部702が、上記(1)で抽出された文字列の先頭文字列をプロトコル文字列とする。ここでは、「http−www−example−com」の先頭文字列「http−」がプロトコル文字列となり、プロトコルがhttpであると解釈される。
(3)要求解釈部702が、上記(1)で抽出された文字列から、上記(2)で解釈に用いた先頭の文字列を削除する。ここでは、「http−www−example−com」から「http−」が削除される。
(4)要求解釈部702が、上記(3)で残った文字列のハイフンをすべてドットに置換してFQDN文字列を生成する。ここでは、「www−example−com」からFQDN文字列「www.example.com」が生成される。
(5)要求解釈部702が、上記(2)のプロトコル文字列および上記(4)で生成されたFQDN文字列を用いて、URL1120を生成する。ここでは、URL1120「http://www.example.com/mypath」が生成される。
これにより、クライアント端末101が中継サーバ102経由で目的サーバ103にアクセス可能な形式で変換されたURL1110を、中継サーバ102が目的サーバ103に送信可能な形式に復元することができる。
(クッキーの変換例)
つぎに、クッキーの変換例について説明する。図12は、クッキーの変換例を示す説明図である。ここでは、図10に示したレスポンス1000のクッキー1021の変換例について説明する。なお、ここでは中継サーバ102のドメイン名を『r.proxy.com』とする。
(1)クッキー変換部714が、『;』を区切り文字として、元のドメイン名、元のパス名、元のクッキー名を連結して変換後のクッキー名とする。
元のドメイン名『.example.com』、元のパス名『/mypath』、元のクッキー名『foo』
→.example.com;/mypath;foo
(2)クッキー変換部714が、クッキー名として使用できない文字を(%+16進表記の文字)の形式でエスケープする。ここでは、『;』が『%3B』に置き換えられ、『/』が『%2F』に置き換えられる。
.example.com;/mypath;foo
→.example.com%3B%2Fmypath%3Bfoo
(3)クッキー変換部714が、元の有効期限文字列内の区切り文字を『−』で置換して、変換後のクッキー値とする。ここでは、有効期限をGMT(Greenwich Mean Time)形式で記述する。
Fri, 25−Mar−2011 02:14:30 GMT
→Fri−25−Mar−2011−02−14−30−GMT
(4)クッキー変換部714が、元のクッキーのセキュアフラグが有効であれば『S』を、無効であれば『s』を、変換後のクッキー値の最後に追加する。ここでは、元のクッキーのセキュアフラグは無効である。
Fri−25−Mar−2011−02−14−30−GMT
→Fri−25−Mar−2011−02−14−30−GMTs
(5)クッキー変換部714が、変換後のクッキー値に元のクッキー値を追加する。ここで、元のクッキー値は『bar』である。
Fri−25−Mar−2011−02−14−30−GMTs
→Fri−25−Mar−2011−02−14−30−GMTsbar
(6)クッキー変換部714が、変換後のドメイン名を中継サーバ102のドメイン名『.r.proxy.com』とし、パス名を『/』としてクッキー1200を生成する。すなわち、クライアント端末101が中継サーバ102のドメイン名に属するクッキーと認識できるように変換する。なお、ここではドメインを明示的に指定するときには先頭にドットをつける。一方、明示的に指定しないときはリクエストURIのドメインと同じものが指定されていると解釈する。ただし、先頭のドットはつけない。
→www.example.com%3B%2Fmypath%3Bfoo=Fri−25−Mar−2011−02−14−30−GMTsbar;path=/;domain=.r.proxy.com;expires=Fri, 25−Mar−2011 02:14:30 GMT
これにより、目的サーバ103からのレスポンス1000に付加されているクッキー1021を、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式に変換することができる。
(クッキーの復元例)
つぎに、クッキーの復元例について説明する。図13は、クッキーの復元例を示す説明図である。ここでは、図8に示したリクエスト800のクッキー823,824の復元例について説明する。
(1)クッキー復元部703が、復元対象となるクッキー823,824のクッキー名1301,1302のURLエンコーディング(%+16進表記の文字)を復元する。ここでは、『%3B』が『;』に置き換えられ、『%2F』が『/』に置き換えられる。
・クッキー823
www.example.com%3B%2Fmypath%3Bfoo
→www.example.com;/mypath;foo
・クッキー824
www.example2.com%3B%2F%3Bkey
→www.example2.com;/;key
(2)クッキー復元部703が、『;』を区切り文字として、クッキー名1301,1302を『ドメイン名』、『パス名』、『元のクッキー名』に分解する。
・クッキー823
www.example.com;/mypath;foo
→ドメイン名『www.example.com』、パス名『/mypath』、元のクッキー名『foo』
・クッキー824
www.example2.com;/;key
→ドメイン名『www.example2.com』、パス名『/』、元のクッキー名『key』
(3)クッキー復元部703が、クッキー値1303,1304のURLエンコーディング(%+16進表記の文字)を復元する。ここでは、クッキー値1303,1304ともに、%+16進表記の文字が含まれていないため処理を省略する。
(4)クッキー復元部703が、クッキー値1303,1304を『有効期限文字列』、『セキュアフラグ』、『元のクッキー値』に分解する。
・クッキー823
Fri−25−Mar−2011−02−14−30−GMTsbar
→有効期限文字列『Fri−25−Mar−2011−02−14−30−GMT』、セキュアフラグ『s』、元のクッキー値『bar』
・クッキー824
Sat−29−Apr−2011−04−30−18−GMTs1234
→有効期限文字列『Sat−29−Apr−2011−04−30−18−GMT』、セキュアフラグ『s』、元のクッキー値『1234』
(5)クッキー復元部703が、クッキー823の元のクッキー名『foo』と元のクッキー値『bar』を用いて、復元後のクッキー1310を生成する。また、クッキー復元部703が、クッキー824の元のクッキー名『key』と元のクッキー値『1234;』を用いて、復元後のクッキー1320を生成する。
これにより、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式で変換されているクッキー823,824を、目的サーバ103が認識可能な形式に復元することができる。
(復元後のクッキーの付加例)
つぎに、復元後のクッキーの付加例について説明する。図14は、復元後のクッキーの付加例を示す説明図である。ここでは、図13に示した復元後のクッキー1310,1320の付加例について説明する。
(1)判定部705が、復元後のクッキー1310,1320のドメイン名が、リクエスト先のドメイン名と一致または上位のドメイン名となっているか否かを判定する。ここで、リクエスト先のドメイン名(復元後のURLに含まれるドメイン名)は『www.example.com』である。また、クッキー1310のドメイン名は『www.example.com』であり、クッキー1320のドメイン名は『www.example2.com』である。
・クッキー1310→ドメイン名一致
・クッキー1320→ドメイン名不一致
(2)第1付加部704が、上記(1)でドメイン名が一致または上位と判定されたクッキー1310をリクエスト800に付加する。一方、上記(1)でドメイン名が不一致と判定されたクッキー1320は付加対象から除外される。これにより、リクエスト先に対して不要なクッキーをリクエストから排除することができる。
(識別用クッキーの付加例)
つぎに、端末識別用のクッキーおよびセッション識別用のクッキーの付加例について説明する。図15は、識別用クッキーの付加例を示す説明図である。ここでは、図10に示したレスポンス1000に端末識別用のクッキーおよびセッション識別用のクッキーを付加する場合について説明する。
(1)第2付加部715が、クッキー名『_client_id』のクッキー1510をレスポンス1000に付加する。ただし、クッキー1510のクッキー値は現在のセッションの端末識別用のクッキー値とし、有効期限は規定値(たとえば、現在から1年後など)とする。また、ドメイン名は中継サーバ102のドメイン名と異なる『.proxy.com』とし、パス名は『/』とし、セキュアフラグは無効とする。これにより、以降において、端末識別用のクッキーを用いて、ユーザを識別することができる。
(2)第2付加部715が、クッキー名『_session』のクッキー1520をレスポンス1000に付加する。ただし、クッキー1520のクッキー値は『true』とし、有効期限はなしとする。また、ドメイン名は中継サーバ102のドメイン名と異なる『.proxy.com』とし、パス名は『/』とし、セキュアフラグは無効とする。これにより、以降において、セッション識別用のクッキーを用いて、セッションを識別することができる。
(欠落しているクッキーの補完例)
つぎに、欠落しているクッキーの補完例について説明する。図16は、欠落しているクッキーの補完例を示す説明図である。図16において、リクエスト800のリクエストヘッダ820には復元後のクッキー1310が記述されている。ここで、リクエスト先のURLのドメイン名は『www.example.com』、パス名は『/mypath』である。また、リクエスト800のプロトコルは暗号化用ではない。
(1)検索部706が、ドメイン名がリクエスト先のドメイン名と一致または上位でかつパス名がリクエスト先のパス名と先頭一致のクッキーをクッキーDB120の中から検索する。ここでは、クッキー『foo=bar』(クッキー情報600−1)とクッキー『client=ie』(クッキー情報600−2)が検索される。
(2)第1付加部704が、検索されたクッキーがリクエスト800に付加されているか否かを判断する。ここで、リクエスト800に、クッキー『foo=bar』(クッキー1310)は付加されているが、クッキー『client=ie』は付加されていない。
(3)第1付加部704が、クッキー『client=ie』(クッキー1610)をリクエスト800のリクエストヘッダ820に付加する。これにより、クライアント端末101のブラウザ側のクッキーの保持制限により欠落しているクッキーを補完することができる。
(コードの置換例)
つぎに、上記コード置換部716によるコードの置換例について説明する。図17は、JavaScriptコードの置換例を示す説明図である。コード置換部716は、HTML形式のドキュメントかJavaScript形式の内容に対して、JavaScriptコードによってクッキー値を参照・更新している部分の書き換えを行なう。JavaScriptコード中では、document.cookie1710という変数がクッキーを表わしており、これの参照・更新がクッキー値の読取・書換処理となっている。
したがって、JavaScriptコード中で、”document.cookie=更新値”(符号1720)というパターンに合致する文を、”SetCookie(更新値)”(符号1730)という関数の呼び出しに置換する。そのあと”document.cookie”(符号1710)という変数を使用している箇所を”GetCookie()”(符号1740)という関数の呼び出しに置換する。
(コードの挿入例)
つぎに、上記コード置換部716によるコードの挿入例について説明する。図18は、JavaScriptコードの挿入例を示す説明図である。コード置換部716は、HTML形式のドキュメント中の特定箇所(<head>タグの直後など)に、SetCookie関数、GetCookie関数の定義を行なうJavaScriptコード1800を挿入する。なお、GetCookie関数やSetCookie関数の定義は一か所だけでよい。ここでは、置換対象となるHTML形式およびJavaScript形式のうち、関数の挿入を「HTML形式のドキュメント中」に限定して説明する。また、JavaScriptコードは、コードテーブル(不図示)に格納されている。なお、コードテーブルとは、SetCookie関数、GetCookie関数の定義を行なうJavaScriptコード(たとえば、JavaScriptコード1800)を保持するテーブルである。コードテーブルは、たとえば、RAM503、磁気ディスク505、光ディスク507などの記憶装置に記憶されている。
GetCookie関数は、document.cookieへの参照を行なっていた箇所から呼び出され、変換された形式のクッキーを解釈して、変換前の形式で参照できるようにする。SetCookie関数は、document.cookieへの更新を行なっていた箇所から呼び出され、変換前の形式での更新値を解釈して、変換後のクッキー名、クッキー値で更新を行なうようにする。
なお、JavaScriptコードからクッキーの削除を行なう場合は、有効期限を過去の値にしてdocument.cookieの更新を行なうことになっているため、クッキーの削除用の処理は更新用の処理と同じである。
(リクエストの加工例)
つぎに、上記要求解釈部702によるリクエストの加工例について説明する。図19および図20は、リクエストの加工例を示す説明図である。また、図21は、リクエストヘッダの加工例を示す説明図である。図19に示す例では、リクエスト1900に含まれる情報のうち、メソッド、パス、およびリクエストボディは加工しない。一方、リクエストヘッダは図20に示すように加工される。
図20において、リクエストヘッダに含まれる情報のうち、HostおよびRefererは図4に示したURLの復元方法により加工され、Accept、If−Modified−SinceおよびUser−Agentは加工されない。具体的には、たとえば、図21に示すように、リクエストヘッダ2110は、加工されてリクエストヘッダ2120に変換される。
(レスポンスの加工例)
つぎに、上記応答解釈部713によるレスポンスの加工例について説明する。図22および図23は、レスポンスの加工例を示す説明図である。また、図24は、レスポンスヘッダの加工例を示す説明図である。また、図25は、レスポンスボディの加工例を示す説明図である。
図22に示す例では、レスポンス2200に含まれる情報のうち、ステータス行は加工されない。レスポンスボディは、MIMEタイプを示すContent−Typeがtext/*の場合は、ボディ全体に対して、図3に示した変換方法により加工される。さらに、Content−Typeがtext/htmlの場合は、SCRIPTタグが挿入される。ただし、Framesetタグが発見されたときは、SCRIPTタグの挿入は行なわれない。
レスポンスヘッダは、図23に示すように加工される。具体的には、レスポンスヘッダに含まれる情報のうち、Content−Type、Content−DispositionおよびExpiresは加工されない。Content−Lengthは、加工後のレスポンスボディの長さに変更され、Transfer−EncodingとContent−Encodingはエンコーディング方式に合わせて設定し直す。Set−Cookieは、図12に示したような変換方法により加工される。
Locationは、図3に示した変換方法により加工され、WWW−Authenticateは、シングルサインオンを行なう場合を除いて加工されない。より具体的には、たとえば、図24に示すように、レスポンスヘッダ2410は、加工されてレスポンスヘッダ2420に変換される。また、図25に示すように、レスポンスボディ2510は、加工されてレスポンスボディ2520に変換される。
この場合、図24に示すレスポンスヘッダ2410のContent−Lengthは、6110から6432に変換され、図25に示すレスポンスボディ2520には、SCRIPTタグが挿入されている。このレスポンス2200を受信したクライアント端末101のブラウザは、SCRIPTタグにより指定されたスクリプトを使用して中継サーバ102によって機能を付加することもできる。
ユーザは、目的サーバ103と挿入したいスクリプトの組をユーザ情報として、予め中継サーバ102に登録しておくこともできる。この場合、セッション管理部707は、ユーザ情報を参照してユーザを特定し、応答変換部717は、その指定に応じたスクリプトをレスポンスボディに挿入することになる。
(中継サーバの各種処理手順)
<要求中継処理手順>
つぎに、中継サーバ102の各種処理手順について説明する。図26は、中継サーバの要求中継処理手順の一例を示すフローチャートである。図26のフローチャートにおいて、まず、要求受信部701により、クライアント端末101からリクエストを受信したか否かを判断する(ステップS2601)。
ここで、リクエストを受信するのを待って(ステップS2601:No)、受信した場合(ステップS2601:Yes)、セッション管理部707により、セッション管理処理を実行する(ステップS2602)。このあと、要求解釈部702により、受信されたリクエストのURLを復元し(ステップS2603)、リクエストを加工する(ステップS2604)。
つぎに、クッキー復元部703により、リクエストに含まれているクッキーを復元するクッキー復元処理を実行し(ステップS2605)、リクエストから欠落しているクッキーを補完するクッキー補完処理を実行する(ステップS2606)。このあと、要求送信制御部708により、要求送信部709を制御して、リクエストを目的サーバ103に転送して(ステップS2607)、本フローチャートによる一連の処理を終了する。
これにより、クライアント端末101からのリクエストを目的サーバ103に中継することができる。このとき、リクエストから欠落しているクッキーを補完して目的サーバ103に転送することができる。
<セッション管理処理手順>
つぎに、図26に示したステップS2602のセッション管理処理の具体的な処理手順について説明する。図27は、セッション管理処理の具体的処理手順を示すフローチャートである。図27のフローチャートにおいて、まず、セッション管理部707により、リクエストのリクエストヘッダに端末識別用のクッキーがあるか否かを判断する(ステップS2701)。
ここで、端末識別用のクッキーがある場合(ステップS2701:Yes)、セッション管理部707により、その端末識別用のクッキーのクッキー値が端末対応テーブル900にあるか否かを判断する(ステップS2702)。なお、端末識別用のクッキーのクッキー値とは、端末対応テーブル900の端末識別クッキーのフィールドに設定されている情報である。
ここで、端末対応テーブル900にクッキー値がある場合(ステップS2702:Yes)、セッション管理部707により、リクエストヘッダにセッション識別用のクッキーがあるか否かを判断する(ステップS2703)。
ここで、セッション識別用のクッキーがある場合(ステップS2703:Yes)、セッション管理部707により、端末対応テーブル900内の該当エントリを現在のセッションとして(ステップS2704)、図26に示したステップS2603に移行する。
一方、セッション識別用のクッキーがない場合(ステップS2703:No)、セッション管理部707により、クッキーDB120から端末識別用のクッキーが一致するエントリを検索して(ステップS2705)、そのエントリからセッション識別用のクッキーを削除する(ステップS2706)。なお、端末識別用のクッキーとはクッキーDB120のクライアントIDのフィールドに設定されている情報であり、セッション識別用のクッキーとはセッションIDのフィールドに設定されている情報である。すなわち、セッション識別用のクッキーがない場合は、新しいセッションを開始するために、以前のセッションIDを破棄する。そして、セッション管理部707により、端末対応テーブル900内の該当エントリを現在のセッションとして(ステップS2704)、図26に示したステップS2603に移行する。
また、ステップS2701において、端末識別用のクッキーがない場合(ステップS2701:No)、セッション管理部707により、端末識別用のクッキー値を生成する(ステップS2707)。同様に、ステップS2702において、端末対応テーブル900にクッキー値がない場合(ステップS2702:No)、セッション管理部707により、端末識別用のクッキー値を生成する(ステップS2707)。そして、生成されたクッキー値を端末対応テーブル900に設定することで新たなエントリを登録する(ステップS2708)。つぎに、そのエントリを現在のセッションとして(ステップS2704)、図26に示したステップS2603に移行する。
これにより、端末対応テーブル900を用いて、クライアント端末101とのセッションを管理することができるようになる。
<クッキー復元処理手順>
つぎに、図26に示したステップS2605のクッキー復元処理の具体的な処理手順について説明する。図28は、クッキー復元処理の具体的処理手順を示すフローチャートである。
図28のフローチャートにおいて、まず、クッキー復元部703により、リクエストの中からクッキーを抽出して(ステップS2801)、クッキー名のURLエンコーディングを復元する(ステップS2802)。そして、クッキー復元部703により、『;』を区切り文字として、クッキー名を『ドメイン名』、『パス名』、『元のクッキー名』に分解する(ステップS2803)。
つぎに、クッキー復元部703により、リクエストに含まれているクッキー値のURLエンコーディングを復元する(ステップS2804)。そして、クッキー復元部703により、クッキー値を『有効期限文字列』、『セキュアフラグ』、『元のクッキー値』に分解する(ステップS2805)。
このあと、クッキー復元部703により、『元のクッキー名』および『元のクッキー値』を用いて、復元後のクッキーを生成する(ステップS2806)。そして、クッキー復元部703により、『元のクッキー名』に対応するエントリをクッキーDB120の中から検索する(ステップS2807)。
ここで、エントリが検索された場合(ステップS2808:Yes)、クッキー復元部703により、『元のクッキー値』と『有効期限文字列』を用いて、エントリのクッキー値と有効期限を更新する(ステップS2809)。
一方、エントリが非検索の場合(ステップS2808:No)、『ドメイン名』、『パス名』、『元のクッキー名』、『有効期限文字列』、『セキュアフラグ』、『元のクッキー値』を用いて、新規エントリをクッキーDB120に登録する(ステップS2810)。なお、新規エントリのクライアントIDおよびセッションIDは、新たに生成されることになる。
このあと、判定部705により、復元後のクッキーのドメイン名が、リクエストのドメイン名と一致または上位のドメイン名となっているか否かを判定する(ステップS2811)。ここで、一致または上位の場合(ステップS2811:Yes)、判定部705により、復元後のクッキーのパス名が、リクエストのパス名と先頭一致のパス名となっているか否かを判定する(ステップS2812)。
ここで、一致または上位の場合(ステップS2812:Yes)、判定部705により、復元後のクッキーのセキュアフラグが有効かつリクエストのプロトコルがhttpsではないかを判定する(ステップS2813)。
ここで、セキュアフラグが無効、または、セキュアフラグが有効かつプロトコルがhttpsの場合(ステップS2813:No)、第1付加部704により、リクエストヘッダに復元後のクッキーを付加する(ステップS2814)。そして、クッキー復元部703により、リクエストの中から抽出されていない未抽出のクッキーがあるか否かを判断する(ステップS2815)。
ここで、未抽出のクッキーがある場合(ステップS2815:Yes)、ステップS2801に戻る。一方、未抽出のクッキーがない場合(ステップS2815:No)、図26に示したステップS2606に移行する。また、ステップS2811において、ドメイン名が一致または上位ではない場合(ステップS2811:No)、ステップS2815に移行する。
また、ステップS2812において、パス名が先頭一致ではない場合(ステップS2812:No)、ステップS2815に移行する。また、ステップS2813において、セキュアフラグが有効かつプロトコルがhttpsではない場合(ステップS2813:Yes)、ステップS2815に移行する。
これにより、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式で変換されているクッキーを、目的サーバ103が認識可能な形式に復元することができる。
<クッキー補完処理>
つぎに、図26に示したステップS2606のクッキー補完処理の具体的な処理手順について説明する。図29は、クッキー補完処理の具体的処理手順を示すフローチャートである。
図29のフローチャートにおいて、まず、検索部706により、クッキーDB120の中から、クライアントIDが、リクエストの端末識別用のクッキー値と一致するエントリがあるか否かを判断する(ステップS2901)。ここで、エントリがある場合(ステップS2901:Yes)、検索部706により、クッキーDB120の中からクライアントIDが一致するエントリを選択する(ステップS2902)。
このあと、検索部706により、選択されたエントリの有効期限が切れているか否かを判断する(ステップS2903)。ここで、有効期限が切れている場合(ステップS2903:Yes)、クッキーDB120の中から選択されたエントリを削除して(ステップS2904)、ステップS2901に戻る。
一方、有効期限が切れていない場合(ステップS2903:No)、検索部706により、選択されたエントリのドメイン名が、リクエストのドメイン名と一致または上位のドメイン名となっているか否かを判断する(ステップS2905)。
ここで、一致または上位の場合(ステップS2905:Yes)、検索部706により、選択されたエントリのパス名が、リクエストのパス名と先頭一致となるパス名となっているか否かを判断する(ステップS2906)。
ここで、先頭一致の場合(ステップS2906:Yes)、検索部706により、エントリのセキュアフラグが有効かつリクエストのプロトコルがhttpsではないかを判断する(ステップS2907)。
ここで、セキュアフラグが無効、または、セキュアフラグが有効かつプロトコルがhttpsの場合(ステップS2907:No)、第1付加部704により、リクエストヘッダに選択されたエントリのクッキーを付加して(ステップS2908)、ステップS2901に戻る。
また、ステップS2905において、ドメイン名が一致または上位ではない場合(ステップS2905:No)、ステップS2901に戻る。また、ステップS2906において、パス名が先頭一致ではない場合(ステップS2906:No)、ステップS2901に戻る。また、ステップS2907において、セキュアフラグが有効かつプロトコルがhttpsではない場合(ステップS2907:Yes)、ステップS2901に戻る。
これにより、クライアント端末101のブラウザ側のクッキーの保持制限により欠落しているクッキーを補完することができる。
<応答中継処理手順>
つぎに、中継サーバ102の応答中継処理手順について説明する。図30は、中継サーバの応答中継処理手順の一例を示すフローチャートである。図30のフローチャートにおいて、まず、応答受信部710により、目的サーバ103からレスポンスを受信したか否かを判断する(ステップS3001)。
ここで、レスポンスを受信するのを待って(ステップS3001:No)、受信した場合(ステップS3001:Yes)、第2付加部715により、識別用クッキーをレスポンスに付加する識別用クッキー付加処理を実行する(ステップS3002)。つぎに、レスポンスから欠落しているクッキーを補完するクッキー補完処理を実行する(ステップS3003)。
そして、クッキー変換部714により、レスポンスに含まれているクッキーを変換するクッキー変換処理を実行する(ステップS3004)。このあと、応答解釈部713により、レスポンスヘッダのContent−Type:行を解釈して応答内容がHTML形式またはJavaScript形式のドキュメントか否かを判断する(ステップS3005)。
ここで、応答内容がHTML形式またはJavaScript形式のドキュメントではない場合(ステップS3005:No)、ステップS3008に移行する。一方、応答内容がHTML形式またはJavaScript形式のドキュメントの場合(ステップS3005:Yes)、コード置換部716により、レスポンスボディに格納されているドキュメントのうち、クッキー値を参照・更新するためのコードを書き換える(ステップS3006)。
そして、応答変換部717により、レスポンス(応答内容)に対する変更処理を実行する(ステップS3007)。最後に、応答送信制御部718により、応答送信部719を制御して、レスポンスをクライアント端末101に転送して(ステップS3008)、本フローチャートによる一連の処理を終了する。なお、ステップS3003のクッキー補完処理については、図29に示したクッキー補完処理と同様のため(補完先がリクエストからレスポンスとなる)、ここでは詳細な説明を省略する。
これにより、目的サーバ103からのレスポンスをクライアント端末101が中継サーバ102からのものと認識可能な形式に変換して中継することができる。
<識別用クッキー付加処理>
つぎに、図30に示したステップS3002の識別用クッキー付加処理の具体的な処理手順について説明する。図31は、識別用クッキー付加処理の具体的処理手順の一例を示すフローチャートである。
図31のフローチャートにおいて、まず、第2付加部715により、端末対応テーブル900から現在のセッションの端末識別クッキーを抽出する(ステップS3101)。そして、第2付加部715により、クッキー名『_client_id』のクッキーをレスポンスに付加する(ステップS3102)。
ただし、クッキー値は現在のセッションの端末識別クッキーとし、有効期限は規定値とし、ドメイン名は中継サーバ102のドメイン名と異なる『.proxy.com』とし、パス名は『/』とし、セキュアフラグは無効とする。
このあと、第2付加部715により、クッキー名『_session』のクッキーをレスポンスに付加して(ステップS3103)、図30に示したステップS3003に移行する。ただし、クッキー値は『true』とし、有効期限はなしとし、ドメイン名は中継サーバ102のドメイン名と異なる『.proxy.com』とし、パス名は『/』とし、セキュアフラグは無効とする。
<クッキー変換処理手順>
つぎに、図30に示したステップS3003のクッキー変換処理の具体的な処理手順について説明する。図32は、クッキー変換処理の具体的処理手順の一例を示すフローチャートである。
図32のフローチャートにおいて、まず、クッキー変換部714により、『;』を区切り文字として、元のドメイン名、元のパス名、元のクッキー名を連結して変換後のクッキー名とする(ステップS3201)。そして、クッキー変換部714により、クッキー名として使用不可の文字をエスケープする(ステップS3202)。
このあと、クッキー変換部714により、元のクッキーに有効期限があるか否かを判断する(ステップS3203)。ここで、有効期限がある場合(ステップS3203:Yes)、クッキー変換部714により、元の有効期限文字列の区切り文字を『−』で置換して変換後のクッキー値とする(ステップS3204)。
一方、有効期限がない場合(ステップS3203:No)、クッキー変換部714により、変換後のクッキー値を1つのハイフンとする(ステップS3205)。つぎに、クッキー変換部714により、元のクッキーにセキュアフラグがあれば『S』を、なければ『s』を変換後のクッキー値の最後に追加する(ステップS3206)。
そして、クッキー変換部714により、変換後のクッキー値に元のクッキー値を追加して(ステップS3207)、変換後のドメイン名を『.r.proxy.com』、パス名を『/』として(ステップS3208)、図30に示したステップS3004に移行する。
これにより、目的サーバ103からのレスポンスに付加されているクッキーを、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式に変換することができる。
(クライアント端末のクッキー参照・更新処理手順)
つぎに、クライアント端末101のクッキー参照処理手順について説明する。図33は、クライアント端末のクッキー参照処理手順の一例を示すフローチャートである。
図33のフローチャートにおいて、まず、クライアント端末101により、window.location変数から、現在のドキュメントのプロトコル、ドメイン名、パス名を取得する(ステップS3301)。
具体的には、たとえば、現在のページを『http://http−www−example−com.r.proxy.com/an/example/path.html』とする。この場合、ステップS3301では、window.location変数を参照すると、『http://http−www−example−com.r.proxy.com/an/example/path.html』が得られる。そして、クライアント端末101が、この値を解釈して、目的サーバ103のURLは『http://www.example.com/an/example/path.html』であるとする。
図33のフローチャートの説明に戻り、つぎに、クライアント端末101により、document.cookieの値を、『;』を区切り文字として分解して元クッキーリストを作成する(ステップS3302)。
具体的には、たとえば、クライアント端末101が、document.cookieの値を参照すると、図34に示すような文字列3400が得られる。図34は、document.cookieの値を参照して得られる文字列の一例を示す説明図である。そして、クライアント端末101が、文字列3400を『;』を区切り文字として分割し、各要素を解釈して、図35に示すような元クッキーリストを作成する。
図35は、元クッキーリストの記憶内容の一例を示す説明図である。図35において、元クッキーリスト3500は、ドメイン名、パス名、クッキー名、有効期限、セキュアフラグ、クッキー値のフィールドを有する。各フィールドに情報を設定することで、元クッキーがレコードとして記憶されている。
図33のフローチャートの説明に戻り、つぎに、クライアント端末101により、結果文字列を空にする(ステップS3303)。そして、クライアント端末101により、元クッキーリストが空か否かを判断する(ステップS3304)。
ここで、元クッキーリストが空でない場合(ステップS3304:No)、クライアント端末101により、元クッキーリストの先頭要素を処理対象クッキーとして元クッキーリストから削除する(ステップS3305)。
そして、クライアント端末101により、処理対象クッキーのクッキー名とクッキー値から実クッキーのクッキー名、クッキー値、有効期限、ドメイン名、パス名セキュアフラグを復元する(ステップS3306)。このあと、クライアント端末101により、有効期限が切れているか否かを判断する(ステップS3307)。
ここで、有効期限が切れている場合(ステップS3307:Yes)、ステップS3304に戻る。一方、有効期限が切れていない場合(ステップS3307:No)、クライアント端末101により、ドメイン名が現在のドメイン名と一致または上位のドメイン名となっているか否かを判断する(ステップS3308)。
ここで、ドメイン名が一致または上位ではない場合(ステップS3308:No)、ステップS3304に戻る。一方、ドメイン名が一致または上位の場合(ステップS3308:Yes)、クライアント端末101により、パス名が現在のパス名と先頭一致になっているか否かを判断する(ステップS3309)。
ここで、パス名が先頭一致ではない場合(ステップS3309:No)、ステップS3304に戻る。一方、パス名が先頭一致の場合(ステップS3309:Yes)、クライアント端末101により、セキュアフラグが有効かつ現在のプロトコルがhttpsではないかを判断する(ステップS3310)。
ここで、セキュアフラグが有効かつ現在のプロトコルがhttpsではない場合(ステップS3310:Yes)、ステップS3304に戻る。一方、セキュアフラグが無効、または、セキュアフラグが有効かつ現在のプロトコルがhttpsの場合(ステップS3310:No)、クライアント端末101により、クッキー名、クッキー値からクッキー文字列を生成し結果文字列に追加して(ステップS3311)、ステップS3304に戻る。
そして、ステップS3304において、元クッキーリストが空の場合は(ステップS3304:Yes)、クライアント端末101により、結果文字列を返り値として(ステップS3312)、本フローチャートによる一連の処理を終了する。
すなわち、元クッキーリストの各エントリに対して、ステップ3307〜ステップS3310の判定を実行し、追加すべきエントリであれば結果文字列へ追加する。図35に示した元クッキーリスト3500の例では、ステップS3307の有効期限のチェックでは、3番目のエントリが除外され、ステップS3308のドメイン名のチェックでは4番目のエントリが除外される。
また、ステップS3309のパス名のチェックでは、2番目のエントリは目的サーバ103のURLとは一致していないが、先頭一致のパスになっているため除外されず、この例では除外されるエントリはない。ステップS3310の判定では、この例の対象プロトコルはhttpなので除外されるエントリはない。結果として、1番目と2番目のエントリが残り、下記に示すような結果文字列として設定される。
alpha=aleph;beta=beth
つぎに、クライアント端末101のクッキー更新処理手順について説明する。図36は、クライアント端末のクッキー更新処理手順の一例を示すフローチャート(その1)である。図36のフローチャートにおいて、まず、クライアント端末101により、window.location変数から、現在のドキュメントのプロトコル、ドメイン名、パス名を取得する(ステップS3601)。
具体的には、たとえば、現在のページを『http://http−www−example−com.r.proxy.com/an/example/path.html』とする。この場合、ステップS3601では、window.location変数を参照すると、『http://http−www−example−com.r.proxy.com/an/example/path.html』が得られる。そして、クライアント端末101が、この値を解釈して、目的サーバ103のURLは『http://www.example.com/an/example/path.html』であるとする。
図36のフローチャートの説明に戻り、つぎに、クライアント端末101により、引数(arg)からクッキー名、クッキー値、ドメイン名、パス名、セキュアフラグ、有効期限を取得する(ステップS3602)。
ここで、ステップS3602においてSetCookie()を呼び出している部分のコード例3700を図37に示す。図37は、コード例を示す説明図である。クライアント端末101が、引数をクッキーの書式にしたがって解釈し、ドメイン名は『example.com』、パス名は『/』、クッキー名は『alpha』、クッキー値は『aleph』とする。また、セキュアフラグは『無効』、有効期限は『Tue, 01−Jan−2999 15:00:00 GMT』とする。
図36のフローチャートの説明に戻り、つぎに、クライアント端末101により、ドメイン名が現在のドメイン名と一致または上位のドメイン名となっているか否かを判断する(ステップS3603)。ここで、ドメイン名が一致または上位ではない場合(ステップS3603:No)、本フローチャートによる一連の処理を終了する。
一方、ドメイン名が一致または上位の場合(ステップS3603:Yes)、クライアント端末101により、パス名が現在のパス名と先頭一致のパス名となっているか否かを判断する(ステップS3604)。ここで、パス名が先頭一致ではない場合(ステップS3604:No)、本フローチャートによる一連の処理を終了する。
一方、パス名が先頭一致の場合(ステップS3604:Yes)、クライアント端末101により、ドメイン名、パス名、クッキー名から変換後のクッキー名を生成する(ステップS3605)。そして、クライアント端末101により、有効期限、セキュアフラグ、クッキー値から変換後のクッキー値を生成する(ステップS3606)。
このあと、クライアント端末101により、ドメイン名を『.r.proxy.com』、パス名を『/』、有効期限を引数から取得した有効期限とする(ステップS3607)。最後に、クライアント端末101により、クッキー設定文字列を生成し、document.cookieに代入して(ステップS3608)、本フローチャートによる一連の処理を終了する。
すなわち、ステップS3603,3604では、ステップS3602で解釈された値と現在のドメイン名、パス名のチェックを行なう。この例では、ドメインが上位になっておりパスが先頭一致となっているため有効とみなされる。そして、引数から解釈した情報を用いて、ステップS3605で変換後のクッキー名を、ステップS3606で変換後のクッキー値を生成する。さらに、ステップS3607でドメイン名、パス名、有効期限を生成し、これらの値からステップS3608で図38に示すようなクッキー設定文字列3800を生成する。図38は、クッキー設定文字列の一例を示す説明図である。
以上説明したように、本開示技術では、レスポンスの中からクッキーを抽出して、リクエスト先と関連付けてクッキーDB120に登録する。そして、本開示技術では、リクエストを受信すると、リクエスト先に対応するクッキーをクッキーDB120内のクッキー群の中から検索してリクエストに付加する。
これにより、中継サーバ102において、ブラウザ側のクッキーの保持制限などによりリクエストから欠落しているクッキーを補完して、目的サーバ103に転送することができる。その結果、クライアント端末101のブラウザ側のクッキーの保持制限による問題を回避して、目的サーバ103側での処理を正常に行なえるようになる。
また、本開示技術では、レスポンスの中から抽出されたクッキーを、クライアント端末101が中継サーバ102のドメインのものとして認識可能な形式に変換することにより、中継サーバ102経由でもクッキーを扱えるようになる。
また、本開示技術では、レスポンスに含まれるHTML形式のドキュメントのうち、クッキー値を参照・更新するためのコードを、変換後のクッキーを参照・更新するためのコードに書き換える。これにより、クライアント端末101のブラウザ側で、変換後のクッキーの中身にアクセスできるようになる。
また、本開示技術では、クッキーDB120内のクッキー群のうち、リクエスト先のドメイン名と一致または該ドメイン名よりも上位のドメイン名と関連付けて登録されているクッキーを検索することにしてもよい。これにより、クッキーDB120内のクッキー群の中からリクエスト先に対して有効なクッキーを絞り込んで、リクエストに補完することができる。
また、本開示技術では、さらに、検索されたクッキーのうち、リクエスト先のパス名と先頭一致するパス名に関連付けて登録されているクッキーを検索することにしてもよい。これにより、クッキーDB120内のクッキー群の中からリクエスト先に対して有効なクッキーをリクエストに補完することができる。
また、本開示技術では、リクエストのプロトコルが暗号化用ではない場合、クッキーDB120内のクッキー群のうち、セキュアフラグが有効のクッキーを検索対象から除外することにしてもよい。これにより、秘匿すべきクッキーが第3者に盗み見られたり、改ざんされることを防止することができる。
また、本開示技術では、クッキーDB120内のクッキー群のうち、有効期限が切れているクッキーを検索対象から除外することにしてもよい。これにより、有効期限内のクッキーのみを検索対象とすることができる。
なお、ブラウザ側のクッキーの保持制限による問題を回避するために、複数個のクッキーを一つにまとめることでクッキーの数を減らすことも考えられる。しかしながら、複数個のクッキーをまとめるとクッキー自体の文字数制限に抵触して、結果的にすべての情報をクッキーに埋め込むことができない場合があるという問題がある。さらに、複数のレスポンスの順序が入れ替わってしまう場合のコヒーレンシーの問題が発生してしまう。
また、クッキーの情報を中継サーバのDBに保存して、そのDBのID(代表ID)を新たなクッキー情報としてクライアント端末に送信することも考えられる。しかしながら、この手法では、ブラウザには、たとえば、JavaScriptでクッキーを操作する機能が用意されるが、代表IDを使うと、ブラウザからクッキーそのものの中身にアクセスできなくなるという問題がある。
これに対して、本開示技術によれば、クッキー自体の文字数制限に抵触することなく、また、レスポンスの順序が入れ替わることによるコヒーレンシーの問題を防止して、ブラウザ側のクッキーの保持制限による問題を回避することができる。さらに、代表IDを使うことで発生するクッキー内のJavaScriptがクッキーにアクセス不能となる問題を抑止することができる。
(実施の形態2)
つぎに、本中継手法の実施の形態2について説明する。実施の形態1では、クライアント端末101のブラウザ側で、意図的にクッキーが削除された場合と、クッキーDB120の保持制限によりクッキーが削除された場合との区別ができない。そのため、実施の形態1では、クッキーが意図的に削除されているにも関わらず、中継サーバ102でクッキーが補完され目的サーバ103に転送される場合がある。
そこで、実施の形態2では、クライアント端末101が、クッキーを削除(あるいは、書き換え)したことを表わす更新履歴をリクエストに含めて中継サーバ102に送信する。これにより、中継サーバ102側で、欠落しているクッキーが、クライアント端末101側で意図的に削除されたものかどうかを把握できるようにする。なお、実施の形態1で説明した箇所と同様の箇所については図示および説明を省略する。
(更新履歴の具体例)
ここで、リクエストに含まれるクライアント端末101側でクッキーを意図的に削除したことを表わす更新履歴について説明する。図39は、更新履歴の具体例を示す説明図である。図39において、リクエスト3900には、クライアント端末101側でクッキーを意図的に削除したことを表わす更新履歴3910が含まれている。
具体的には、更新履歴3910は、クッキー名『_modlog』のクッキーとして表わされる。より具体的には、文字列3911は、シーケンス番号『1』、ドメイン名『www.example.com』、パス名『/』、クッキー名『id』のクッキーが『Sat, 29−Mar−2009 20:09:13 GMT』に削除されたことを表わす。また、文字列3912は、シーケンス番号『2』、ドメイン名『www.example3.com』、パス名『/app』、クッキー名『user』のクッキーが『Sat, 29−Mar−2009 18:30:10 GMT』に削除されたことを表わす。
なお、文字列3920は、処理済シーケンス番号を表わす。具体的には、文字列3920は、前回のリクエストを送信するまでにシーケンス番号0までのクッキーは処理済みであることを表わしている。更新履歴3910は、クライアント端末101で生成されてリクエスト3900に追加されることになる。なお、クライアント端末101での更新履歴追加処理については図44を用いて後述する。
(クッキー復元部703の機能的構成)
つぎに、実施の形態2にかかる中継サーバ102のクッキー復元部703が備える機能的構成について説明する。図40は、クッキー復元部703が備える機能的構成を示すブロック図である。図40において、クッキー復元部703は、第1付加部704と、判定部705と、検索部706と、更新履歴抽出部4001と、更新対象検索部4002と、更新部4003と、を含む構成である。
更新履歴抽出部4001は、リクエストの中から、クライアント端末101側で行なわれたクッキーに対する更新処理に関する履歴データを抽出する機能を有する。具体的には、たとえば、更新履歴抽出部4001が、リクエスト3900の中から、クッキー名『_modlog』を手掛かりに更新履歴3910を抽出する。抽出された更新履歴は、たとえば、図41に示す更新履歴リスト4100に記憶される。
図41は、中継サーバの更新履歴リストの記憶内容の一例を示す説明図である。図41において、更新履歴リスト4100は、シーケンス番号、ドメイン名、パス名、クッキー名、有効期限、セキュアフラグおよびクッキー値のフィールドを有する。各フィールドに情報を設定することで、更新履歴4100−1,4100−2がレコードとして記憶されている。
更新対象検索部4002は、抽出された履歴データに基づいて、クッキーDB120内のクッキー群の中から更新対象となるクッキーを検索する機能を有する。具体的には、たとえば、更新対象検索部4002が、クッキーDB120(図6参照)の中から、ドメイン名、パス名、クッキー名が更新履歴4100−1,4100−2と一致するクッキー情報を検索する。この例では、クッキーDB120の中からクッキー情報600−4が検索される。
更新部4003は、履歴データに基づいて、検索された更新対象のクッキーを更新する機能を有する。具体的には、たとえば、更新部4003が、更新履歴4100−2に含まれている有効期限が切れている場合、更新対象となるクッキー情報600−4をクッキーDB120の中から削除する。また、更新部4003は、更新履歴4100−2に含まれている有効期限が切れていない場合、更新対象となるクッキー情報600−4の内容を更新履歴4100−2の内容に書き換える。なお、内容とは、たとえば、有効期限、セキュアフラグ、クッキー値である。
また、検索部706は、更新部4003によって更新された更新後のクッキーDB120内のクッキー群の中から、リクエストの宛先に対応するクッキーを検索する。すなわち、検索部706が、ブラウザ側で意図的に削除されたクッキーを排除したクッキーDB120の中からリクエストの宛先に対応するクッキーを検索する。
(中継サーバの更新履歴処理手順)
つぎに、中継サーバ102の更新履歴処理手順について説明する。図42は、中継サーバの更新履歴処理手順の一例を示すフローチャートである。図42のフローチャートにおいて、まず、更新履歴抽出部4001により、リクエストから更新履歴を抽出して、更新履歴リストを作成する(ステップS4201)。
このあと、更新対象検索部4002により、リクエストから処理済シーケンス番号を取得して(ステップS4202)、更新履歴リストに更新履歴があるか否かを判断する(ステップS4203)。ここで、更新履歴がある場合(ステップS4203:Yes)、更新対象検索部4002により、更新履歴リストから先頭の更新履歴を取り出して、更新履歴リストから削除する(ステップS4204)。
そして、先頭の更新履歴のシーケンス番号が処理済シーケンス番号よりも大きいか否かを判断する(ステップS4205)。ここで、処理済シーケンス番号以下の場合(ステップS4205:No)、ステップS4203に戻る。
一方、処理済シーケンス番号よりも大きい場合(ステップS4205:Yes)、更新対象検索部4002により、先頭の更新履歴のドメイン名、パス名、クッキー名に一致するエントリをクッキーDB120の中から検索する(ステップS4206)。ここで、エントリが非検索の場合(ステップS4207:No)、ステップS4203に戻る。
一方、エントリが検索された場合(ステップS4207:Yes)、更新部4003により、先頭の更新履歴の有効期限は切れているか否かを判断する(ステップS4208)。ここで、有効期限切れの場合(ステップS4208:Yes)、更新部4003により、クッキーDB120の中から該当エントリを削除する(ステップS4209)。
一方、有効期限が切れていない場合(ステップS4208:No)、更新部4003により、クッキーDB120内の該当エントリの内容を、先頭の更新履歴の内容に書き換える(ステップS4210)。そして、更新部4003により、処理済シーケンス番号をインクリメントして(ステップS4211)、ステップS4203に戻る。
また、ステップS4203において、更新履歴リストに更新履歴がない場合(ステップS4203:No)、本フローチャートによる一連の処理を終了する。
これにより、欠落しているクッキーが、クライアント端末101側で意図的に削除されたものかどうかを把握できるようになり、意図的に削除されたクッキーを補完してしまう不具合を回避することができる。
(クライアント端末のクッキー更新処理)
つぎに、クライアント端末101のクッキー更新処理手順について説明する。図43は、クライアント端末のクッキー更新処理手順の一例を示すフローチャート(その2)である。
図43のフローチャートにおいて、まず、クライアント端末101により、window.location変数から、現在のドキュメントのプロトコル、ドメイン名、パス名を取得する(ステップS4301)。そして、クライアント端末101により、引数(arg)からクッキー名、クッキー値、ドメイン名、パス名、セキュアフラグ、有効期限を取得する(ステップS4302)。
つぎに、クライアント端末101により、ドメイン名が現在のドメイン名と一致または上位のドメイン名となっているか否かを判断する(ステップS4303)。ここで、ドメイン名が一致または上位ではない場合(ステップS4303:No)、本フローチャートによる一連の処理を終了する。
一方、ドメイン名が一致または上位の場合(ステップS4303:Yes)、クライアント端末101により、パス名が現在のパス名と先頭一致となっているか否かを判断する(ステップS4304)。ここで、パス名が先頭一致ではない場合(ステップS4304:No)、本フローチャートによる一連の処理を終了する。
一方、パス名が先頭一致の場合(ステップS4304:Yes)、クライアント端末101により、ドメイン名、パス名、クッキー名から変換後のクッキー名を生成する(ステップS4305)。そして、クライアント端末101により、有効期限、セキュアフラグ、クッキー値から変換後のクッキー値を生成する(ステップS4306)。
このあと、クライアント端末101により、ドメイン名を『.r.proxy.com』、パス名を『/』、有効期限を引数から取得した有効期限とする(ステップS4307)。そして、クライアント端末101により、クッキー設定文字列を生成し、document.cookieに代入する(ステップS4308)。
最後に、クライアント端末101により、クッキー設定文字列を引数にして、更新履歴追加処理を実行して(ステップS4309)、本フローチャートによる一連の処理を終了する。
<更新履歴追加処理手順>
つぎに、図43に示したステップS4309の更新履歴追加処理の具体的な処理手順について説明する。図44は、更新履歴追加処理の具体的処理手順の一例を示すフローチャートである。
図44のフローチャートにおいて、まず、クライアント端末101により、引数argを解釈して今回更新したクッキーの情報を抽出する(ステップS4401)。ここでは、今回更新したクッキーの情報をクッキーの書式にしたがって解釈した結果、ドメイン名は『example.com』、パス名は『/』とする。また、クッキー名は『alpha』、クッキー値は『aleph』、セキュアフラグは『無効(No)』、有効期限は『Tue, 01−Jan−2999 15:00:00 GMT』とする。
そして、クライアント端末101により、クッキー名『_modlog』のクッキー値を取得する(ステップS4402)。具体的には、たとえば、クライアント端末101が、document.cookie変数の値を参照し、クッキーの書式にしたがってクッキー名が『_modlog』のエントリを検索し、クッキー値(たとえば、クッキー値4500)を取得する。図45は、クッキー値の具体例を示す説明図である。
クライアント端末101により、クッキー値を解釈して更新履歴リストを作成する(ステップS4403)。具体的には、たとえば、クライアント端末101が、取得したクッキー値の16進表記をデコードし、『;』を区切り文字として解釈して更新履歴リストを作成する。図46は、クライアント端末の更新履歴リストの記憶内容の一例を示す説明図である。
図46において、更新履歴リスト4600は、シーケンス番号、ドメイン名、パス名、クッキー名、有効期限、セキュアフラグ、クッキー値のフィールドを有する。各フィールドに情報を設定することで、更新履歴4600−1,4600−2,4600−3がレコードとして記憶されている。
そして、クライアント端末101により、クッキー名『_modlog』のクッキー値を取得して、処理済シーケンス番号を取得する(ステップS4404)。具体的には、たとえば、クライアント端末101が、document.cookie変数の値を参照し、クッキーの書式にしたがってクッキー名が『_modlog』のエントリを検索し、処理済シーケンス番号を取得する。ここでは、この処理済シーケンス番号を0とする。
このあと、クライアント端末101により、更新履歴リストの中から処理済シーケンス番号以下のシーケンス番号の更新履歴を削除する(ステップS4405)。具体的には、たとえば、クライアント端末101が、更新履歴リスト4600から、シーケンス番号が0以下のエントリを削除する。この例では、シーケンス番号が0のエントリ(更新履歴4600−1)が削除される。
そして、クライアント端末101により、更新履歴リストの最後のエントリのシーケンス番号をインクリメントして今回のシーケンス番号とする(ステップS4406)。具体的には、たとえば、クライアント端末101が、今回のシーケンス番号を3とする。
さらに、クライアント端末101により、更新履歴リストの中から今回更新したクッキーに対する以前の更新履歴を削除する(ステップS4407)。具体的には、たとえば、クライアント端末101が、今回更新したクッキーの更新履歴を更新履歴リスト4600から探して削除する。この例ではシーケンス番号1のエントリ(更新履歴4600−2)がドメイン名、パス名、クッキー名が一致しているので削除される。
そして、クライアント端末101により、今回のシーケンス番号を付した新しい更新履歴のエントリを作成して更新履歴リストの最後に追加する(ステップS4408)。具体的には、たとえば、クライアント端末101が、今回更新したクッキーの更新履歴のエントリを更新履歴リスト4600に追加する。エントリが追加された例を図47に示す。
図47は、エントリが追加された更新履歴リストの記憶内容の一例を示す説明図である。図47において、更新履歴リスト4600には、更新履歴4600−3,4700−1がレコードとして記憶されている。ここでは、図46に示した更新履歴リスト4600から更新履歴4600−1,4600−2が削除され、更新履歴4700−1が追加されている。
最後に、クライアント端末101により、更新履歴リストを文字列化し、クッキー名『_modlog』のクッキー値として設定して(ステップS4409)、本フローチャートによる一連の処理を終了する。
具体的には、たとえば、クライアント端末101が、更新履歴リスト4600の情報を『;』を区切り文字として連結し、クッキー文字列中に使用不可な文字を16進表記にエンコードして_modlogの値とする。図48は、文字列の一例を示す説明図である。図48において、更新履歴リストを文字列化した文字列4800が示されている。
以上説明したように、実施の形態2にかかる本開示技術では、リクエストの中からクッキーの更新履歴を抽出し、その更新履歴に基づいて、クッキーDB120内のクッキー群の中から更新対象となるクッキーを検索する。そして、本開示技術では、更新履歴に基づいて、検索されたクッキーを更新し、更新後のクッキーDB120内のクッキー群の中から、リクエスト先に対応する状態データを検索する。これにより、リクエストから欠落しているクッキー(または、変更されているクッキー)が、クライアント端末101側で意図的に削除(または、変更)されたものかを把握することができる。
また、本開示技術では、更新履歴に含まれている有効期限が切れている場合、更新対象となるクッキーをクッキーDB120の中から削除することにしてもよい。これにより、クライアント端末101側で意図的に削除されたクッキーをリクエストに補完してしまうことを回避することができる。
また、本開示技術では、更新履歴に含まれている有効期限が切れていない場合、更新対象となるクッキーの内容を更新履歴の内容に書き換えることにしてもよい。これにより、クライアント端末101側で更新されたクッキーの内容を中継サーバ102のクッキーDB120に反映することができる。
なお、本実施の形態で説明した中継方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本中継プログラムは、ハードディスク、フレキシブルディスク、CD−ROM、MO、DVD等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また、本中継プログラムは、インターネット等のネットワークを介して配布してもよい。
上述した実施の形態に関し、さらに以下の付記を開示する。
(付記1)ネットワーク内の通信を中継する中継装置において、
リクエストおよびレスポンスを受信する受信手段と、
前記受信手段によって受信されたリクエストおよびレスポンスを送信する送信手段と、
前記レスポンスの中からリクエスト元のアクセス状態を識別するための状態データを抽出して、リクエスト先と関連付けてデータベースに登録する登録手段と、
前記リクエストのリクエスト先に対応する状態データを、前記データベース内の状態データ群の中から検索する検索手段と、
前記検索手段によって検索された状態データを前記リクエストに付加する付加手段と、
前記送信手段を制御して、前記付加手段によって前記状態データが付加されたリクエストを前記リクエスト先に送信する送信制御手段と、
を備えることを特徴とする中継装置。
(付記2)前記レスポンスの中から抽出された状態データを、前記リクエスト元が前記中継装置のドメインのものとして認識可能な形式に変換する変換手段と、
前記レスポンスに含まれるドキュメントのうち、前記状態データを参照・更新するためのコードを、前記リクエスト元が前記変換手段によって変換された変換後の状態データを解釈して変換前の状態データを参照・更新するためのコードに書き換える置換手段と、を備え、
前記付加手段は、前記変換手段によって変換された変換後の状態データを前記置換手段によって前記状態データを参照・更新するためのコードが書き換えられたレスポンスに付加し、
前記送信制御手段は、前記送信手段を制御して、前記付加手段によって変換後の状態データが付加されたレスポンスを前記リクエスト元に送信することを特徴とする付記1に記載の中継装置。
(付記3)前記登録手段は、前記状態データを前記リクエスト先のドメイン名と関連付けて前記データベースに登録し、
前記検索手段は、前記データベース内の状態データ群のうち、前記リクエストのリクエスト先のドメイン名と一致または当該ドメイン名よりも上位のドメイン名と関連付けて登録されている状態データを検索することを特徴とする付記1または2に記載の中継装置。
(付記4)前記登録手段は、前記状態データを前記リクエスト先のパス名と関連付けて前記データベースに登録し、
前記検索手段は、さらに、検索された状態データのうち、前記リクエストのリクエスト先のパス名と先頭一致するパス名に関連付けて登録されている状態データを検索することを特徴とする付記3に記載の中継装置。
(付記5)前記登録手段は、前記状態データを当該状態データの暗号化を指定するためのセキュアフラグの設定状態と関連付けて前記データベースに登録し、
前記検索手段は、前記リクエストのプロトコルが暗号化用ではない場合、前記データベース内の状態データ群のうち、前記セキュアフラグが有効の状態データを検索対象から除外することを特徴とする付記1〜4のいずれか一つに記載の中継装置。
(付記6)前記登録手段は、前記状態データを当該状態データの有効期限と関連付けて前記データベースに登録し、
前記検索手段は、前記データベース内の状態データ群のうち、前記有効期限が切れている状態データを検索対象から除外することを特徴とする付記1〜5のいずれか一つに記載の中継装置。
(付記7)前記リクエストの中から、前記リクエスト元で行なわれた前記状態データに対する更新処理に関する履歴データを抽出する更新履歴抽出手段と、
前記更新履歴抽出手段によって抽出された履歴データに基づいて、前記データベース内の状態データ群の中から更新対象となる状態データを検索する更新対象検索手段と、
前記履歴データに基づいて、前記検索手段によって検索された状態データを更新する更新手段と、を備え、
前記検索手段は、前記更新手段によって更新された更新後の前記データベース内の状態データ群の中から、前記リクエスト先に対応する状態データを検索することを特徴とする付記1〜6のいずれか一つに記載の中継装置。
(付記8)前記履歴データは、前記状態データの有効期限を含んでおり、
前記更新手段は、前記履歴データに含まれている有効期限が切れている場合、前記更新対象となる状態データを前記データベースの中から削除することを特徴とする付記7に記載の中継装置。
(付記9)前記更新手段は、前記履歴データに含まれている有効期限が切れていない場合、前記更新対象となる状態データの内容を前記履歴データの内容に書き換えることを特徴とする付記8に記載の中継装置。
(付記10)前記受信手段によって受信されたリクエストに付加されており、前記リクエスト元が前記中継装置のドメインのものとして認識可能に変換された状態データを復元する復元手段を備え、
前記付加手段は、前記復元手段によって復元された復元後の状態データを前記リクエストに付加し、
前記送信制御手段は、前記送信手段を制御して、前記付加手段によって前記復元後の状態データが付加されたリクエストを前記リクエスト先に送信することを特徴とする付記1〜9のいずれか一つに記載の中継装置。
(付記11)前記復元手段は、前記中継装置を経由してリクエスト元からリクエスト先にアクセス可能な形式に変換されたリクエストの宛先を復元し、
前記送信制御手段は、前記送信手段を制御して、前記復元手段によって復元された復元後の宛先を用いて、前記リクエストを送信することを特徴とする付記10に記載の中継装置。
(付記12)前記復元手段は、前記中継装置を経由してリクエスト元からリクエスト先にアクセス可能な形式に変換されたリクエストを復元し、
前記送信制御手段は、前記送信手段を制御して、前記復元手段によって復元された復元後のリクエストを送信することを特徴とする付記10または11に記載の中継装置。
(付記13)ネットワーク内の通信を中継するコンピュータを、
リクエストおよびレスポンスを受信する受信手段、
前記受信手段によって受信されたリクエストおよびレスポンスを送信する送信手段、
前記レスポンスの中からリクエスト元のアクセス状態を識別するための状態データを抽出して、リクエスト先と関連付けてデータベースに登録する登録手段、
前記リクエストのリクエスト先に対応する状態データを、前記データベース内の状態データ群の中から検索する検索手段、
前記検索手段によって検索された状態データを前記リクエストに付加する付加手段、
前記送信手段を制御して、前記付加手段によって前記状態データが付加されたリクエストを前記リクエスト先に送信する送信制御手段、
として機能させることを特徴とする中継プログラム。
(付記14)ネットワーク内の通信を中継するコンピュータが、
リクエスト先からレスポンスを受信する応答受信工程と、
前記応答受信工程によって受信されたレスポンスの中からリクエスト元のアクセス状態を識別するための状態データを抽出して、前記リクエスト先と関連付けてデータベースに登録する登録工程と、
前記リクエスト元からリクエストを受信する要求受信工程と、
前記要求受信工程によって受信されたリクエストのリクエスト先に対応する状態データを、前記データベース内の状態データ群の中から検索する検索工程と、
前記検索工程によって検索された状態データを前記リクエストに付加する付加工程と、
前記付加工程によって前記状態データが付加されたリクエストを前記リクエスト先に送信する要求送信工程と、
を実行することを特徴とする中継方法。