【課題】Webブラウザからの要求に、オリジンサーバ側で保有するコンテンツのリンクが絶対パスで記述されている場合であっても、要求をオリジンサーバへと転送させる継装置、中継方法および中継プログラムを提供する。
【解決手段】リバースプロキシサーバ10(中継装置)は、Webブラウザ100(ユーザエージェント)からの要求をLAN120(内部ネットワーク)に属する機器200A,B,C(オリジンサーバ)のいずれかへと要求を中継する。この要求には、Cookieヘッダ、あるいはRefererヘッダのいずれかが含まれている。Webブラウザ100からの要求に含まれるURIと、上述のいずれかのヘッダに含まれるURIとを比較して、URIを書き換えるか否かを判定する判定部と、判定結果に応じてWebブラウザ100からの要求に含まれるURIを書き換える処理部を有する。
外部ネットワークに属するユーザエージェントからの要求を受け付けて、前記ユーザエージェントの要求先に応じて、内部ネットワークに属する複数のオリジンサーバのいずれかへと前記要求を中継する中継装置であって、
前記要求には、前記ユーザエージェントに対して前記中継装置が予め付与した情報が記述されているヘッダ、あるいは前記ユーザエージェントが前記オリジンサーバへの要求を行ったリンク元を示す情報が記述されているヘッダが含まれており、
前記ユーザエージェントからの要求に含まれるURIと、前記ヘッダに含まれるURIとを比較して、前記ユーザエージェントからの要求に含まれるURIを書き換えるか否かを判定する判定部と、
前記判定部の判定結果に応じて前記ユーザエージェントからの要求に含まれるURIを書き換える処理部と、
を有することを特徴とする中継装置。
外部ネットワークに属するユーザエージェントからの要求を受け付けて、前記ユーザエージェントの要求先に応じて、内部ネットワークに属する複数のオリジンサーバのいずれかへと前記要求を中継する中継方法であって、
前記要求には、前記ユーザエージェントに対して前記中継装置が予め付与した情報が記述されているヘッダ、あるいは前記ユーザエージェントが前記オリジンサーバへの要求を行ったリンク元を示す情報が記述されているヘッダが含まれており、
前記ユーザエージェントからの要求に含まれるURIと、前記ヘッダに含まれるURIとを比較して、前記ユーザエージェントからの要求に含まれるURIを書き換えるか否かを判定する判定ステップと、
前記判定ステップの判定結果に応じて前記ユーザエージェントからの要求に含まれるURIを書き換える処理ステップと、
を有することを特徴とする中継方法。
コンピュータを、外部ネットワークに属するユーザエージェントからの要求を受け付けて、前記ユーザエージェントの要求先に応じて、内部ネットワークに属する複数のオリジンサーバのいずれかへと前記要求を中継する中継装置として機能させるためのプログラムであって、
前記要求には、前記ユーザエージェントに対して前記中継装置が予め付与した情報が記述されているヘッダ、あるいは前記ユーザエージェントが前記オリジンサーバへの要求を行ったリンク元を示す情報が記述されているヘッダが含まれており、
前記コンピュータを、
前記ユーザエージェントからの要求に含まれるURIと、前記ヘッダに含まれるURIとを比較して、前記ユーザエージェントからの要求に含まれるURIを書き換えるか否かを判定する判定手段と、
前記判定手段の判定結果に応じて前記ユーザエージェントからの要求に含まれるURIを書き換える処理手段と、
として機能させるための中継プログラム。
【発明の概要】
【発明が解決しようとする課題】
【0005】
ところで、ユーザがWebページへアクセスする際にはWebブラウザなどのユーザエージェントにその目的となるWebサーバ(以下、目的となるWebサーバを「オリジンサーバ」という。)のURI(Uniform Resource Identifier)を指定して表示させることができる。オリジンサーバが保持しているWebページを構成する各コンテンツには、通常、起点となる現在位置から目的のファイルやフォルダまでの道筋を記述する方式(以下、この記述方式を単に「相対パス」という。)でのリンクが記述されているが、装置内の最上位階層から目的のファイルやフォルダまでのすべての道筋を記述する方式(以下、この記述方式を単に「絶対パス」という。)でのリンクが記述されている場合もある。ここで、オリジンサーバの代理としてリバースプロキシが構築されている場合であって、目的のWebページ内のコンテンツへのリンクがオリジンサーバでの絶対パスで記述されていると、リバースプロキシがオリジンサーバに対して目的のコンテンツを要求できない場合がある。以下、この不具合について具体的に説明する。
【0006】
Webブラウザから要求されるオリジンサーバのURIには、要求の宛先となるオリジンサーバの他に、オリジンサーバおよびリバースプロキシのいずれかにて解釈される文字列が含まれている。たとえば、Webブラウザに下記の記述(1)のURIが指定されたとする。
http://www.dit.co.jp/origin/company/index.html ・・・(1)
この記述(1)に示すURIで説明すると、“/origin/company/index.html”というパス部分がオリジンサーバおよびリバースプロキシのいずれかにて解釈される文字列に相当する。また、このパス部分にオリジンサーバの識別子である“/origin”が埋め込まれていることで、リバースプロキシが「どのオリジンサーバへの要求か」を把握して、Webブラウザから要求されたコンテンツの取得先のオリジンサーバを決定することができる。つまり、記述(1)に示すURIでの“/origin”はリバースプロキシが解釈する部分であるので、オリジンサーバによって直接解釈される文字列は“/company/index.html”となる。そのため、(1)の要求をWebブラウザから受信したリバースプロキシは、要求先のオリジンサーバに対して“/origin”を削除した下記の記述(2)の要求を送信して、オリジンサーバから“index.html”を取得して、Webブラウザへ応答を返す。これにより、Webブラウザ上では“index.html”が表示されることになる。
/company/index.html ・・・(2)
【0007】
次に、Webブラウザが上記の記述(1)の要求で取得した“index.html”に記述されている画像コンテンツへのリンクが相対パスで記述されているとする。たとえば、“index.html”内に下記の記述(3)のリンクがあるとする。
<A HREF=“baz.jpg”>写真</a> ・・・(3)
そして、Webブラウザにて表示されるWebページ上でこの記述(3)に示すリンクがクリックされたとする。このとき、上記のリンクで指定された画像コンテンツについて、Webブラウザは“http://www.dit.co.jp/origin/company/”下にある“baz.jpg”であると認識するため、リバースプロキシへのURI要求は、下記の記述(4)となる。
http://www.dit.co.jp/origin/company/baz.jpg ・・・(4)
【0008】
Webブラウザから上記の記述(4)の要求を受信したリバースプロキシは、記述(4)の要求先のオリジンサーバに対して、“/origin”を削除した下記の記述(5)の要求を送信して、オリジンサーバから“baz.jpg”を取得して、Webブラウザに応答を返す。これにより、Webブラウザ上では“baz.jpg”の画像コンテンツが表示されることになる。
/company/baz.jpg ・・・(5)
【0009】
一方、Webブラウザが上記の記述(1)に示すURI要求で取得した“index.html”に記述されている画像コンテンツへのリンクがオリジンサーバにおける絶対パスで記述されているとする。たとえば、“index.html”内に下記の記述(6)のリンクがあるとする。
<A HREF=“/img/baz.jpg”> 写真</a> ・・・(6)
そして、Webブラウザで表示されるWebページ上でこの記述(6)のリンクがユーザによりクリックされたとする。
【0010】
Webブラウザは、上記の記述(5)のURI要求をする場合、“http://www.dit.co.jp/”に存在するコンテンツであると認識するため、リバースプロキシへのURI要求は、下記の記述(7)となる。
http://www.dit.co.jp/img/baz.jpg ・・・(7)
この記述(7)の要求を受信したリバースプロキシは、「どのオリジンサーバへの要求か」を把握するパス部分がこの要求に含まれていないため、オリジンサーバが有しているはずの“baz.jpg”を取得することができない。
【0011】
すなわち、オリジンサーバ側で保有するコンテンツのリンクが絶対パスで記述されている場合、リバースプロキシ側でどのオリジンサーバへの要求であるかを判別することができなくなり、Webブラウザからの要求を正しく転送させることができなくなる。
【0012】
本発明は、上述の事情に鑑みてなされたものであり、オリジンサーバ側で保有するコンテンツのリンクが絶対パスで記述されている場合であっても、オリジンサーバへと転送させることができる中継装置、中継方法および中継プログラムを提供することを目的とする。
【課題を解決するための手段】
【0013】
上述の課題を解決するために、本発明の一側面は、中継装置に関するものである。すなわち、外部ネットワークに属するユーザエージェントからの要求を受け付けて、ユーザエージェントの要求先に応じて、内部ネットワークに属する複数のオリジンサーバのいずれかへと要求を中継する中継装置であって、要求には、ユーザエージェントに対して中継装置が予め付与した情報が記述されているヘッダ、あるいはユーザエージェントがオリジンサーバへの要求を行ったリンク元を示す情報が記述されているヘッダが含まれており、ユーザエージェントからの要求に含まれるURIと、ヘッダに含まれるURIとを比較して、ユーザエージェントからの要求に含まれるURIを書き換えるか否かを判定する判定部と、判定部の判定結果に応じてユーザエージェントからの要求に含まれるURIを書き換える処理部とを有することを特徴とする。
【0014】
また、上述した中継装置であって、判定部は、ユーザエージェントから送信される要求の種類に応じて、要求以前にユーザエージェントに対して中継装置が予め付与した情報が記述されているヘッダ、および要求の直前にユーザエージェントが要求を行ったリンク元を示す情報が記述されているヘッダのいずれかを参照して、ユーザエージェントからの要求に含まれるURIを書き換えるか否かを判定することができる。
【0015】
また、上述した中継装置のいずれかであって、ユーザエージェントからの要求に中継装置が予め付与した情報が記述されているヘッダがないときは、その要求の応答をユーザエージェントに送信する際に、Set−Cookieヘッダを付与するヘッダ付与部を有し、処理部は、ユーザエージェントから、ヘッダ付与部により付与されたSet−Cookieヘッダにて指定したCookie名が含まれているCookieヘッダを有する要求があった場合に、その要求に含まれるURIの記述が、その要求のCookieヘッダに含まれるCookie名に対応するCookie値の記述で始まっていない場合には、ユーザエージェントからの要求に含まれるURIの書き換えを行うことができる。
【0016】
また、上述した中継装置のいずれかであって、判定部は、ユーザエージェントからの要求の直前にユーザエージェントがオリジンサーバへの要求を行ったリンク元を示す情報が記述されているRefererヘッダを参照し、ユーザエージェントからの要求に含まれるURIと、Refererヘッダに含まれるURIの一部とを比較して、両者が一致しない場合にユーザエージェントからの要求に含まれるURIの書き換えを行うことができる。
【0017】
また、本発明の一側面は、中継方法に関するものである。すわなち、本発明の中継方法は、外部ネットワークに属するユーザエージェントからの要求を受け付けて、ユーザエージェントの要求先に応じて、内部ネットワークに属する複数のオリジンサーバのいずれかへと要求を中継する中継方法であって、要求には、ユーザエージェントに対して中継装置が予め付与した情報が記述されているヘッダ、あるいはユーザエージェントがオリジンサーバへの要求を行ったリンク元を示す情報が記述されているヘッダが含まれており、ユーザエージェントからの要求に含まれるURIと、ヘッダに含まれるURIとを比較して、ユーザエージェントからの要求に含まれるURIを書き換えるか否かを判定する判定ステップと、判定ステップの判定結果に応じてユーザエージェントからの要求に含まれるURIを書き換える処理ステップとを有するものである。
【0018】
また、本発明の一側面は、中継プログラムに関するものである。すわなち、本発明の中継プログラムは、コンピュータを、外部ネットワークに属するユーザエージェントからの要求を受け付けて、ユーザエージェントの要求先に応じて、内部ネットワークに属する複数のオリジンサーバのいずれかへと要求を中継する中継装置として機能させるための中継プログラムであって、要求には、ユーザエージェントに対して中継装置が予め付与した情報が記述されているヘッダ、あるいはユーザエージェントがオリジンサーバへの要求を行ったリンク元を示す情報が記述されているヘッダが含まれており、コンピュータを、ユーザエージェントからの要求に含まれるURIと、ヘッダに含まれるURIとを比較して、ユーザエージェントからの要求に含まれるURIを書き換えるか否かを判定する判定手段と、判定手段の判定結果に応じてユーザエージェントからの要求に含まれるURIを書き換える処理手段として機能させるためのものである。
【発明の効果】
【0019】
本発明によると、オリジンサーバ側で保有するコンテンツのリンクが絶対パスで記述されている場合であっても、ユーザエージェントからのURI要求をオリジンサーバへと転送させることができる中継装置、中継方法および中継プログラムを提供することができる。
【発明を実施するための形態】
【0021】
以下、本発明の中継装置の一実施の形態であるリバースプロキシサーバ10,10Aについて図面を参照しながら説明する。なお、本発明の中継方法および中継プログラムについては、リバースプロキシサーバ10、10Aの動作およびリバースプロキシサーバ10,10Aにインストールされた中継プログラムを例として説明する。しかしながら、以下で説明する実施の形態は、本発明を具体化した一例であって、本発明を限定するものではない。
【0022】
[第1実施形態]
図1は、本発明の第1実施形態に係るリバースプロキシサーバ10を含むパーソナルプラットフォームシステムの全体構成を示す図である。このパーソナルプラットフォームシステムは、Webブラウザ100からインターネット110およびリバースプロキシサーバ10を介して、ユーザの宅内のLAN(Local Area Network)120に接続されている機器200A、200B、200C(以下、個々に区別する必要がない場合、単に「機器200」という。)に外部から安全にアクセスすることができるシステムである。なお、図示は省略するが、インターネット110側からリバースプロキシサーバ10へのアクセスについては、リバースプロキシサーバ10の特定のポート宛に対する通信であって、特定のIPアドレスが発信元となっている場合にのみ通信を許可する設定がなされたファイアウォールが予め構築されているものとする。
【0023】
Webブラウザ100は、請求項に記載のユーザエージェントの一例であり、
図1に示すパーソナルプラットフォームシステムのユーザが保有しているノートPCやスマートフォンなどの情報処理装置(いずれも不図示)にインストールされている。ユーザは、外出先などでWebブラウザ100を起動し、リバースプロキシサーバ10を介して外部から機器200に接続して、Webベースで閲覧可能に構築されているコンテンツ(たとえば、画像データ、映像データ、テキストデータなど)を閲覧することができる。
【0024】
リバースプロキシサーバ10は、請求項に記載の中継装置の一例であり、いわゆるリバースプロキシ機能を有するサーバである。リバースプロキシサーバ10は、ユーザの宅内に後述する機器200と共にLAN120に接続されており、ユーザが起動したWebブラウザ100からのURI要求を機器200に代わって応答すると共に、要求先の機器200に対してURI要求を転送して、機器200からの応答をWebブラウザ100へ返す装置である。なお、このリバースプロキシサーバ10では、機器200が外部にコンテンツを公開するためのパス名と(以下、このパス名を「公開パス名」という。)、リバースプロキシサーバ10のディレクトリ上で示される仮想的なパス名(以下、このパス名を「仮想パス名」という。)との書き換えをするための関係情報が予め設定されており、Webブラウザ100からの要求に応じて、機器200が解釈できる形式となるように適宜変換して転送するように構成されている。
【0025】
機器200は、たとえば、ネットワークカメラ、ビデオレコーダ、NAS(Network Attached Storage)などの電子機器であり、
図1に示すパーソナルプラットフォームシステムを利用するユーザの宅内に構築されているLAN120に接続されている。なお、機器200は、それぞれ独自のディレクトリ構成およびコンテンツを有しており、上述した仮想パスに関連付けられた公開パス下にコンテンツが保存されており、リバースプロキシサーバ10を介して外部から接続できるように構成されている。なお、
図1に示すパーソナルプラットフォームシステムでは、ユーザはLAN120に接続されている不図示のPC等からリバースプロキシサーバ10に対して機器200についての登録処理を予め実行しているものとする。
【0026】
図2は、
図1に示すリバースプロキシサーバ10の機能的な構成を示すブロック図である。リバースプロキシサーバ10は、フィルタ部11とリバースプロキシ部12とを有している。
【0027】
フィルタ部11は、Webブラウザ100からの要求を受け付けると共に、受け付けた要求に含まれるURIを書き換えるか否かを判定する。また、フィルタ部11は、受け付けた要求に含まれるURIの書き換えの必要があると判定した場合には、適切なURIとなるように書き換えて後述するリバースプロキシ部12を介して機器200へと転送する。また、フィルタ部11は、リバースプロキシ部12を介して機器200から受け取った応答をWebブラウザ100へと転送する。これらの機能を実現するために、フィルタ部11は、
図2に示すように、判定部21と、Cookie付与部22と、処理部23と、要求発行部24と、応答発行部25とを有している。
【0028】
判定部21は、Webブラウザ100からの要求に、後述するCookie付与部22により付与されたCookie名があるか否かを判定する。また、判定部21は、Cookie名があると判定した場合には、このCookie名が記載されているCookieヘッダに含まれるCookie値に基づいてWebブラウザ100からの要求が仮想パス名の先頭部分で始まっているか否かを更に判定して、この判定結果に応じて、受け付けた要求に含まれるURIを書き換えるか否かを決定する。
【0029】
たとえば、判定部21は、Webブラウザ100からの要求に、後述するCookie付与部22により付与されたCookie名が含まれており、かつこの要求に含まれるURIがCookie値から導出される仮想パス名の先頭部分で始まっている場合には、この要求に含まれるURIを後述するリバースプロキシ部12においてそのまま解釈しても問題がないので書き換える必要がないと判断し、後述する要求発行部24へとそのまま受け渡す。
【0030】
一方、判定部21は、Webブラウザ100からの要求に含まれるURIに、後述するCookie付与部22により付与されたCookie名があるが、この要求に含まれるURIがCookie値から導出される仮想パス名の先頭部分で始まっていない場合には、この要求に含まれるURIを後述するリバースプロキシ部12がそのまま解釈すると、どの機器200へ転送すればよいのか判断できないので、この要求に含まれるURIは書き換える必要があると判断し、後述する処理部23に対してURIの書き換え処理の実行を指示する。
【0031】
また、判定部21は、Webブラウザ100からの要求にCookieヘッダが含まれていない場合には、機器200に対して初めての接続であるか、またはCookie情報が何らかの理由で消滅していると判断し、後述するCookie付与部22に対して、この要求に対する応答のヘッダにSet-Cookieヘッダを付与するように指示をする。これにより、この要求以降に発生するWebブラウザ100からの要求に対しては後述するCookie付与部22がSet-Cookieヘッダにて指示したCookie名およびCookie値が付与されることになる。
【0032】
Cookie付与部22は、判定部21からの指示により、Webブラウザ100からのURI要求に対する応答のヘッダにSet-Cookieヘッダを付与する。なお、このSet-Cookieヘッダにはリバースプロキシサーバ10が付与したCookie名とCookie値とが記載される。Cookie名とCookie値は、たとえば、下記の記述(8)に示すように記載される。なお、このCookie名には他のシステムが付与するCookie名と衝突しない(衝突する可能性が十分に低い)適当な文字列が設定されることが好ましい。また、Cookie値には、機器200の仮想パス名の先頭部分が得られる文字列(たとえば、“/orijin”など)が記載される。
Set-Cookie:Cookie名=Cookie値 ・・・(8)
【0033】
処理部23は、上述した判定部21からの指示により、URI要求を書き換える処理を実行する。なお、Webブラウザ100からの要求に含まれるURIを書き換える処理については後述するフローチャート(
図4)で説明する。
【0034】
要求発行部24は、上述した処理部23により書き換えられた後のURI要求、あるいは、判定部21からそのまま受け渡されたURI要求を後述するリバースプロキシ部12へと受け渡す。
【0035】
応答発行部25は、後述するリバースプロキシ部12から受け渡された機器200からの応答(Webブラウザ100からのURI要求の応答に相当)をWebブラウザ100へと転送する。
【0036】
リバースプロキシ部12は、フィルタ部11から受け渡されたURI要求を、機器200側のディレクトリ構成にあった形式に変換して機器200へ転送すると共に、転送したURI要求に対する機器200からの応答を受け取って、フィルタ部11へと転送する機能を有している。これらの機能を実現するために、リバースプロキシ部12は、要求発行転送部31と、応答発行転送部32と、機器情報登録テーブル33とを有している。
【0037】
要求発行転送部31は、上述したフィルタ部11から受け渡されたURI要求を機器200側のディレクトリ構成にあった形式に変換したものを機器200へと転送する。具体的には、要求発行転送部31は、要求発行部24から受け渡されたURI要求が仮想パス名の場合には、後述する機器情報登録テーブル33、あるいはWebブラウザ100からの要求に含まれるCookieヘッダを参照して、転送先の機器200の仮想パス名の先頭部分に該当する文字列を除去することによって公開パス名に変換して目的の機器200へと転送する。
【0038】
応答発行転送部32は、機器200からの応答を受信した場合に、上述したフィルタ部11へと転送する。
【0039】
機器情報登録テーブル33には、機器200の公開パス名とリバースプロキシサーバ10上の仮想パス名とを適切に書き換えるための関係情報が記憶されているテーブルである。リバースプロキシサーバ10では、機器情報登録テーブル33、あるいはWebブラウザ100からの要求に含まれるCookieヘッダを参照することにより、どの機器200に対してのURI要求であるのかを把握して、正しい転送先を決定することができる。
【0040】
(通信処理)
続いて、リバースプロキシサーバ10が実行する中継処理について説明する。なお、リバースプロキシサーバ10では、Webブラウザ100からURI要求が送信されてくると、そのURI要求にCookie付与部22により付与されたCookie名の有無に応じてその後の処理が異なるため、それぞれ別々のフローチャートを示して説明することとする。
図3および
図4は、
図1に示すリバースプロキシサーバ10が実行する中継処理の一例を示すフローチャートである。
【0041】
まず、
図3に示すフローチャートを参照してWebブラウザ100からの要求に含まれるURIにCookie付与部22が予め付与するCookie名がない場合の処理を説明する。この
図3に示す中継処理は、たとえば、Webブラウザ100が起動されてから機器200に初めてアクセスする場合に実行される処理手順である。
【0042】
図3のステップS1において、Webブラウザ100は、下記の(9)のURI要求を発行して、リバースプロキシサーバ10に対してURI要求を送信する。なお、このURI要求にはリバースプロキシサーバ10を示すホスト情報として“proxy”が設定されている。
GET /origin/index.html HTTP/1.1
Host:proxy ・・・(9)
【0043】
ステップS2において、リバースプロキシサーバ10のフィルタ部11は、上記の(9)のURI要求を受信すると、このURI要求にCookie付与部22がSet−Cookieヘッダにより指定した情報であるCookie名(
図3ではCookie名はPとする)があるか否かを判定する。なお、この例の場合、このステップS2において、フィルタ部11により、ステップS1で送信されたURI要求に予め付与したCookie名がないと判定され、処理はステップS3に移行する。
【0044】
ステップS3において、フィルタ部11は、ステップS1で送信されたURI要求については書き換える必要がないため、リバースプロキシ部12にそのまま受け渡す。
【0045】
ステップS4において、リバースプロキシ部12は、ステップS3でフィルタ部11から受け渡されたURI要求を、機器200のディレクトリ構成にあった形式に変換した下記の記述(10)に示すURI要求を機器200に対して発行する。具体的には、リバースプロキシサーバ10側でどの機器200であるかを判別する部分である“/origin”を除去したURI要求を機器200に対して発行する。なお、以後、このリバースプロキシサーバ10側でどの機器200であるかを判別する部分のことを「転送起点」と呼ぶことにする。
GET /index.html HTTP/1.1
Host:orijin ・・・(10)
【0046】
ステップS5において、機器200は、ステップS4のURI要求に対する応答を発行する。具体的には、“index.html”を構成するデータをリバースプロキシサーバ10に対して送信する。
【0047】
ステップS6において、リバースプロキシ部12は、ステップS5で送信された機器200からの応答を受信すると、その応答をフィルタ部11へと受け渡す。
【0048】
ステップS7において、フィルタ部11は、ステップS6で受け渡された機器200からの応答は、ステップS1でWebブラウザ100が送信したURI要求に対する応答であるため、Webブラウザ100へ送信する応答ヘッダにSet-Cookieヘッダを付与したものをWebブラウザ100へと戻す。下記の記述(11)に、その一例を示す。
HTTP/1.1 200 OK
Content−Length:xxxx
Connection:close
Set−Cookie:p=/origin ・・・(11)
【0049】
上記の記述(11)に示した応答を受信したWebブラウザ100では、以後、目的の機器200へURI要求を送信する際には、このSet-Cookieヘッダにて指示された情報をCookieヘッダに付与して送信することになる。
【0050】
続いて、
図4に示すフローチャートを参照して、Webブラウザ100からの要求に含まれるURIにCookie付与部22にて指示された情報であるCookie名がある場合の中継処理について説明する。なお、
図4に示す中継処理は、上述した
図3の中継処理を一度実行した後に、表示されている“index.html”というWebページ内の“index1.html”というリンクがユーザによりクリックされたものとして説明する。
【0051】
ステップS10において、Webブラウザ100は、以下の記述(12)のURI要求をリバースプロキシサーバ10に対して送信する。なお、このステップS10に示したURI要求は、絶対パスで記載されている。また、このステップS10に示したURI要求には、リバースプロキシサーバ10から予め付与されたCookie名(“P”)が記載されたCookieヘッダと、リンク元のURI情報が記載されたRefererヘッダとが含まれている。
GET /index1.html HTTP/1.1
Host:proxy
Cookie:p=/origin
Referer:http://proxy/origin/index.html ・・・(12)
【0052】
ステップS11において、リバースプロキシサーバ10のフィルタ部11は、ステップS10で送信された要求を受信すると、この要求にCookie付与部22により予め付与したCookie名があるか否かを判定する。ステップS10で説明したように、ステップS10で送信されたURI要求には予め付与したCookie名として、“P”があるため、フィルタ部11は、更にステップS12の判定に移行する。
【0053】
ステップS12において、フィルタ部11は、Webブラウザ100からのURI要求(すなわち、GETメソッドで始まる部分)がCookieヘッダに記載されているCookie値から導出される仮想パス名の先頭部分で始まるか否かを判定する。この例では、Webブラウザ100からのURI要求が“/index1.html”で始まるのに対して、Cookieヘッダに記載されているCookie名“P”に対応するCookie値は“/origin”であるため、フィルタ部11はWebブラウザ100からの要求に含まれるURIがCookieヘッダに記載されているCookie値から導出される仮想パス名の先頭部分で始まっていないと判定する。そして、Cookieヘッダに記載されているCookie値から導出される仮想パス名の先頭部分である“/origin”を、上述のURI要求の先頭に挿入する。その結果、フィルタ部11は、以下の記述(13)に示すURI要求をリバースプロキシ部12に受け渡す。これにより、リバースプロキシ部12は、Webブラウザ100からの要求に含まれるURIが絶対パスで記述されていても、どの機器200に対してのURI要求であるかを知ることが可能となる。
GET /origin/index1.html HTTP/1.1
Host:proxy
Cookie:p=/origin
Referer:http://proxy/origin/index.html・・・(13)
【0054】
なお、ステップS13〜ステップS16までのリバースプロキシ部12の処理は、
図3で説明したステップS4〜ステップS7までのリバースプロキシ部12の処理と同様であるため、説明を省略する。
【0055】
(第1実施形態の効果について)
機器200が有しているコンテンツは、通常、ユーザの宅内で閲覧されることを前提として設計されているため、必ずしも外部から参照されることを考慮して設計されているとは限らない。すなわち、コンテンツの保存場所を機器200固有のディレクトリ構成に基づいて絶対パスで記述されている場合がある。そのため、外出先などからWebブラウザ100によって閲覧する際にWebブラウザ100からのURI要求および機器200からの応答について、リバースプロキシサーバ10によって適切に変換してから転送する必要がある。
【0056】
この第1実施形態におけるリバースプロキシサーバ10は、インターネット110(外部ネットワーク)に属するWebブラウザ100(ユーザエージェント)からの要求を受け付けて、Webブラウザ100の要求先に応じて、LAN120(内部ネットワーク)に属する複数の機器200(複数のオリジンサーバ)のいずれかへと要求を中継するものであり、上述の要求には、上述の要求以前にWebブラウザ100に対してリバースプロキシサーバ10のCookie付与部22がSet−Cookieヘッダにて指示した情報であるCookie名およびCookie値が含まれており、Webブラウザ100からの要求に含まれるURIと、その要求のCookieヘッダに含まれるCookie値から導出される仮想パス名の先頭部分とを比較して、Webブラウザ100からの要求に含まれるURIを書き換えるか否かを判定し、その判定結果に応じてWebブラウザ100からの要求に含まれるURIを書き換えるようにしている。これにより、このリバースプロキシサーバ10では、仮に絶対パスで記述されているリンクが機器200のコンテンツに存在していたとしても、Cookie付与部22がSet−Cookieヘッダにて予め指示したCookie名がWebブラウザ100からの要求に含まれるCookieヘッダに記述されている場合には、このCookieヘッダに含まれるCookie値から導出される仮想パス名の先頭部分をURI要求の先頭部分に挿入してからリバースプロキシ部12に受け渡し、リバースプロキシ部12においてどの機器200への要求であるかを判断してから転送することが可能になる。すなわち、このリバースプロキシサーバ10は、機器200で保有するコンテンツのリンクが絶対パスで記述されている場合であっても、Webブラウザ100からのURI要求を目的の機器200に対して転送させることができる。
【0057】
なお、本実施形態とは異なり、Webページ内に含まれるハイパーリンクが“/”で始まっている場合には置き換えが必要と判断して、その応答の契機となったHTTP要求から補完すべき文字列(本実施形態でいえば、“/orijin”に該当するどの機器200への要求であるのかがわかる文字列)を検索して、URI要求のハイパーリンク文字列の先頭に補完するという方法も考えられるが、このような方法では、Webページ内に含まれるハイパーリンクそのものを書き換える必要がある。たとえば、JavaScriptなどで動的にハイパーリンクが生成される場合にはさらに細かい制御が必要となる。そのため、動的にハイパーリンクが生成される場合には絶対パスの置き換え判定が非常に困難になる。この点、本実施形態においては、応答の契機となったリンク元のWebページに含まれる情報を参照して操作するのではなく、リンク先への要求に含まれる情報を参照して操作を行っているため、リンク元のWebページ内に含まれるハイパーリンクそのものを書き換える必要がない。すなわち、リンク元のWebページが上述したようなJavaScriptなどで動的にハイパーリンクが生成されるものであっても、これを解釈しないで絶対パスの置き換え判定ができる構成となっている。
【0058】
[第2実施形態]
図5は、本発明の第2実施形態に係るリバースプロキシサーバ10Aの機能的な構成を示すブロック図である。
図5に示すリバースプロキシサーバ10Aでは、本発明の第1実施形態に係るリバースプロキシサーバ10とは異なり、Cookieヘッダを用いるものではなく、Refererヘッダを用いてWebブラウザ100からのURI要求を目的の機器200へと転送させるものである。なお、Refererヘッダとは、HTTPヘッダの1つであり、インターネット上の1つのウェブページまたは1つのリソースからみて、それにリンクしているウェブページやリソースのアドレスが記載されているものである。なお、第1実施形態と同様の機能については、同一の記号を付して、その説明の一部または全部を省略する。
【0059】
フィルタ部11Aは、
図5に示すように、判定部21Aと、処理部23と、要求発行部24と、応答発行部25、機器情報登録テーブル26とを有している。
【0060】
判定部21Aは、Webブラウザ100からのURI要求に、Refererヘッダが含まれているか否かを判定すると共に、Refererヘッダが含まれていると判定した場合には、このURI要求がRefererヘッダに記載されているURIに含まれるパス名で始まるか否かを更に判定して、この判定結果に応じて受け付けたURI要求を書き換えるか否かを決定する。
【0061】
たとえば、判定部21Aは、Webブラウザ100からのURI要求に、Refererヘッダが含まれており、かつこのURI要求がRefererヘッダに記載されているURIに含まれるパス名と一致する場合には、このURI要求は書き換える必要がないと判断し、後述する要求発行部24へとそのまま受け渡す。
【0062】
また、判定部21Aは、Webブラウザ100からのURI要求に、Refererヘッダが含まれており、かつこのURI要求がRefererヘッダに記載されているURIに含まれるパス名と一致しない場合には、このURI要求は書き換える必要があると判断し、後述する処理部23に対してURI要求の書き換え処理の実行を指示する。
【0063】
なお、判定部21Aは、Webブラウザ100からのURI要求にRefererヘッダが含まれていない場合には、Webブラウザを起動してから初めての接続であるか、またはユーザが明示的にURIを指定していると推測されるため、このURI要求をリバースプロキシ部12へそのまま受け渡す。
【0064】
機器情報登録テーブル26には、機器200の公開パス名とリバースプロキシサーバ10上の仮想パス名とを適切に書き換えるための関係情報(たとえば上述した転送起点そのものと機器200との対応関係を示す情報など)が記憶されているテーブルである。リバースプロキシサーバ10Aでは、機器情報登録テーブル26に記憶されている関係情報を参照することにより、URIに転送起点が含まれているか否かや、どの機器200に対してのURI要求であるのかを把握して、正しい転送先を決定することができる。なお、フィルタ部11Aが有する機器情報登録テーブル26と、リバースプロキシ部12が有する機器情報登録テーブル33とは、機器200に関する同一の情報を保持しているため、フィルタ部11Aおよびリバースプロキシ部12とは独立したものとして構築してもよいし、いずれか一方に構築しておき、テーブルを保持していない方からテーブルを保持している方へ参照するような構成としてもよい。
【0065】
なお、処理部23、要求発行部24、応答発行部25およびリバースプロキシ部12については、上述した第1実施形態と同様の機能を有するものであるため、説明を省略する。
【0066】
(通信処理)
続いて、リバースプロキシサーバ10Aが実行する中継処理について説明する。なお、リバースプロキシサーバ10Aでは、Webブラウザ100からURI要求が送信されてくると、Refererヘッダの有無に応じてその後の処理が異なるため、それぞれ別々のフローチャートを示して説明することとする。
図6および
図7は、
図5に示すリバースプロキシサーバ10Aが実行する中継処理の一例を示すフローチャートである。
【0067】
まず、
図6に示すフローチャートを参照してWebブラウザ100からのURI要求にRefererヘッダが含まれていない場合の処理を説明する。この
図6に示す中継処理は、たとえば、Webブラウザ100が起動されてから初めてアクセスする場合に実行される処理手順である。
【0068】
図6のステップS21において、Webブラウザ100は、下記の記述(14)のURI要求をリバースプロキシサーバ10Aに対して送信する。なお、このURI要求にはリバースプロキシサーバ10Aを示すホスト情報として“proxy”が設定されている。
GET /origin/index.html HTTP/1.1
Host:proxy ・・・(14)
【0069】
ステップS22において、リバースプロキシサーバ10Aのフィルタ部11Aは、上記の(14)のURI要求を受信すると、このURI要求にRefererヘッダがあるか否かを判定する。このステップS22において、フィルタ部11Aは、ステップS21で送信されたURI要求にRefererヘッダがないと判定してステップS23に移行する。
【0070】
ステップS23において、フィルタ部11Aは、ステップS21で送信されたURI要求については書き換える必要がないため、リバースプロキシ部12にそのまま受け渡す。
【0071】
ステップS24において、リバースプロキシ部12は、ステップS23でフィルタ部11Aから受け渡されたURI要求を、機器200のディレクトリ構成にあった形式に変換した下記の記述(15)に示すURI要求を機器200に対して発行する。具体的には、リバースプロキシサーバ10A側でどの機器200であるかを判別する部分(すなわち、上述した第1実施形態で説明した転送起点)である/originを除去したURI要求を機器200に対して発行する。
GET /index.html HTTP/1.1
Host:orijin ・・・(15)
【0072】
ステップS25において、機器200は、ステップS24のURI要求に対する応答を発行する。具体的には、“index.html”を構成するデータをリバースプロキシサーバ10Aに対して送信する。
【0073】
ステップS26において、リバースプロキシ部12は、ステップS25で送信された機器200からの応答を受信すると、その応答をフィルタ部11Aへと受け渡す。
【0074】
ステップS27において、フィルタ部11Aは、ステップS26で受け渡された機器200からの応答をWebブラウザ100へと戻す。下記の記述(16)に、その一例を示す。
HTTP/1.1 200 OK
Content−Length:xxxx
Connection:close・・・(16)
【0075】
続いて、
図7に示すフローチャートを参照して、Webブラウザ100からのURI要求にRefererヘッダが含まれている場合の中継処理について説明する。なお、
図7に示す中継処理は、表示されている“index.html”というWebページ内の“index1.html”というリンクがユーザによりクリックされたものとして説明する。
【0076】
ステップS30において、Webブラウザ100は、以下の記述(17)のURI要求をリバースプロキシサーバ10Aに対して送信する。なお、このステップS30に示したURI要求は、絶対パスで記載されている。また、このステップS30に示したURI要求には、リンク元のURI情報が記載されたRefererヘッダとが含まれている。
GET /index1.html HTTP/1.1
Host:proxy
Referer:http://proxy/origin/index.html ・・・(17)
【0077】
ステップS31において、リバースプロキシサーバ10Aのフィルタ部11Aは、ステップS30で送信されたURI要求を受信すると、このURI要求に判定部22AによりRefererヘッダがあるか否かを判定する。ステップS30で説明したように、ステップS30で送信されたURI要求にはRefererヘッダがあるため、フィルタ部11Aは、更にステップS32の判定に移行する。
【0078】
ステップS32において、フィルタ部11Aは、Webブラウザ100からのURI要求(すなわち、GETメソッドで始まる部分)がRefererヘッダに記載されているURIの絶対パス部分が転送起点と一致するか否かを判定する。この例では、Webブラウザ100からのURI要求が“/index1.html”であるのに対して、Refererヘッダに記載されているURIの絶対パス部分は、“/origin”であるため、フィルタ部11AはWebブラウザ100からの要求に含まれるURIとRefererヘッダに記載されているURIの絶対パス部分とは一致していない(すなわち、両者の転送起点は一致していない)と判定する。そして、ステップS33において、フィルタ部11Aは、Refererヘッダに記載されているURIの絶対パス部分(すわなち、“/origin”)を、上述のWebブラウザ100からの要求に含まれるURIの先頭に挿入して要求を発行する。その結果、フィルタ部11Aは、以下の記述(18)のURI要求をリバースプロキシ部12に受け渡す。これにより、リバースプロキシ部12は、Webブラウザ100からの要求に含まれるURIが絶対パスで記述されていても、どの機器200に対してのURI要求であるかを知ることが可能となる。
GET /origin/index1.html HTTP/1.1
Host:proxy
Referer:http://proxy/origin/index.html ・・・(18)
【0079】
なお、ステップS34〜ステップS37までのリバースプロキシ部12の処理は、
図3で説明したステップS14〜ステップS17までのリバースプロキシ部12の処理と同様であるため、説明を省略する。
【0080】
(第2実施形態の効果について)
この第2実施形態におけるリバースプロキシサーバ10Aでは、インターネット110(外部ネットワーク)に属するWebブラウザ100(ユーザエージェント)からの要求を受け付けて、Webブラウザ100の要求先に応じて、LAN120(内部ネットワーク)に属する複数の機器200(複数のオリジンサーバ)のいずれかへと要求を中継するものであり、上述の要求には、Webブラウザ100からの要求の直前にWebブラウザ100が機器200への要求を行ったリンク元を示す情報が記述されているRefererヘッダが含まれており、Webブラウザ100からの要求に含まれるURIと、Refererヘッダに含まれるURIとを比較して、Webブラウザ100からの要求に含まれるURIを書き換えるか否かを判定し、その判定結果に応じてWebブラウザ100からの要求に含まれるURIを書き換えるようにしている。これにより、リバースプロキシサーバ10Aは、仮に絶対パスで記述されているリンクが機器200のコンテンツに存在していたとしても、Refererヘッダを参照してWebブラウザ100の要求直前のURIを参照することにより、絶対パスで記述されているURIの先頭部分にリバースプロキシサーバ10Aで解釈するためのパス部分を挿入することができる。その結果、リバースプロキシ部12においてどの機器200への要求であるかを判断して転送することができる。すなわち、機器200で保有するコンテンツのリンクが絶対パスで記述されている場合であっても、Webブラウザ100からのURI要求を目的の機器200に対して転送させることができる。
【0081】
(その他の実施の形態)
上述した各実施の形態は、その要旨を逸脱しない限り、様々に変更が可能である。たとえば、第1実施形態におけるリバースプロキシサーバ10の機能と第2実施形態のリバースプロキシサーバ10Aの両方の機能を併せ持ち、Webブラウザ100からの要求の種類に応じて、どちらの機能により判定するかを決定するように構成してもよい。たとえば、Webブラウザ100からGETメソッドの要求が送信されてきた場合には、第2実施形態におけるリバースプロキシサーバ10Aの機能により、Refererヘッダの有無に応じてURIの書き換え判定を行うように構成すると共に、Webブラウザ100からPOSTメソッドの要求が送信されてきた場合には、第1実施形態におけるリバースプロキシサーバ10の機能により、Cookieヘッダに含まれているCookie名が一致するか否かを判定するようにしてもよい。このような構成とすることにより、たとえば、Refererヘッダの有無による判定を採用した場合(すなわち、リバースプロキシサーバ10Aが有する機能による判定を採用した場合)に大量のデータを2回アップロードしなければならなくなるという問題を解消することができる。これは、Refererでは孫参照ができないため、リバースプロキシサーバ10Aの応答で「301 Moved Permanently」などの応答を使って対処したい場合に発生する問題である。リバースプロキシサーバ10Aが1回目のHTTP要求に対して301応答を返すと、Webブラウザ100は、その301応答に含まれるLocation行で指定された宛先に対して2回目のHTTP要求を発行することになる。そして、2回目のHTTP要求の宛先からその応答として200(OK)応答が返り、Webブラウザ100の要求は完了する。この動作自体はPOSTメソッドでもGETメソッドでも同じであるが、GETメソッドは1回の要求で数十からせいぜい数百文字を送信するのに対し、POSTメソッドはより多くの文字を送信することが前提となっているため、Webブラウザ100がたとえば数百万文字を2回送るということが発生し、送信データ量が非常に多くなってしまうことが考えられる。そこで、POSTメソッドの要求の場合には、Cookieヘッダに基づく判定を採用し(すなわち、リバースプロキシサーバ10が有する機能による判定)301応答を使用しなくても応答できるようにし、POSTメソッド以外の要求の場合にはRefererヘッダの有無による判定とすることで、上述した送信データ量が非常に多くなってしまうという問題を解決することができる。
【0082】
また、上述した第1実施形態では、リバースプロキシサーバ10がWebブラウザ100への応答ヘッダにCookie名を付与しているため、機器200側(オリジンサーバ側)でもCookieを付与する構成の場合には、これらのCookieの間で、名前の衝突が起きないように適切な文字列を選択する必要がある。そのような可能性がある場合には、たとえば、リバースプロキシサーバ10側で付与するCookie名、あるいは機器200側で付与するCookie名について一意に識別できるようにルールを設けるようにしてもよい。
【0083】
また、上述した
図3に示すフローチャートのステップS2において、Cookie名を持たない要求URIは、通常、この要求以前にリバースプロキシサーバ10へのアクセスをしていない状況であると考えられるが、このほかにも、Cookieの有効期限が切れた等でCookieが破棄された後に、ユーザがWebページ内に表示されているリンクをクリックしたという可能性も考えられる。Webブラウザ100においてCookieが破棄されている場合、リバースプロキシサーバ10は、要求URIに示される絶対パスで指定されている自己のフォルダの参照を試みるが、典型的には当該リソースが存在しないという404エラー(Not Found)が発生する。なお、リバースプロキシサーバ10に設定されている仮想パスのトップレベル毎にアクセス認証を行っている場合には、401エラー(Unauthrized)が発生する。このような場合には、Webブラウザ100側でもう一度リンク元へのURI要求を行うことで、リバースプロキシサーバ10はCookie名を有する要求として判定するため、その後に正しいリンク先へのアクセスが可能となる。
【0084】
また、上述した
図3に示すフローチャートのステップS3において、リバースプロキシサーバ10側での仮想パス名と機器200側の公開パス名が同一の場合、判定が正しくできない可能性がある。たとえば、機器200に“/foo/img/baz.jpg”というフォルダ構成およびファイルが存在し、そこへ機器200内の絶対パス指定がなされている場合を想定する。ここで、リバースプロキシサーバ10では
http://proxy/foo/bar.html
への要求があると
http://origin/bar.html
に転送される場合に、この“bar.html”に
<A HREF=/foo/img/baz.jpg>
というハイパーリンクがあった場合(a)と、
<A HREF=./img/baz.jpg>
というハイパーリンクがあった場合(b)は、いずれもWebブラウザ100からは以下の記述(19)のような要求が発行されることになる。
GET /foo/img/baz.jpg HTTP/1.1
HOST :proxy
Cookie:p=/foo ・・・(19)
リバースプロキシサーバ10側では、この要求が上述の(a)か(b)のいずれであるかの区別がつかないが、(a)は置き換えを発生させるべきであり、(b)は置き換えを発生させるべきではない。このような事象を回避させるためには、リバースプロキシサーバ10での仮想パス名と機器200側の公開パス名の衝突が起きないように、仮想パス名には、たとえばGUIDなどの衝突の可能性が低い文字列を使用することが好ましい。なお、公開パス名についても同様にたとえばGUIDなどの衝突の可能性が低い文字列を使用することが好ましい。
【0085】
なお、上述した例での要求ヘッダ行は、RFC2616、RFC2396でいう絶対パス(abs_path)形式となっているが、規格上は絶対URI(absoluteURI)の可能性もある。即ち、
GET http://proxy/foo/img/baz.jpg HTTP1.1 ・・・(20)
あるいは
GET http://proxy:80/foo/img/baz.jpg HTTP1.1 ・・・(21)
などの可能性もあるが、上記の記述(20)や記述(21)の場合も(a)と(b)の区別ができない点には変わりがない。なお、リバースプロキシサーバ10の判定において、通常は(a)と判定するが、リバースプロキシサーバ10で仮想パスが有効であった場合には、(b)と判定するようなオプション機能を設けるようにしてもよい。このようオプション機能を具備することで、(a)と(b)ともに有効なリソースであっても一方しか参照されないが、どちらを参照するかを選ぶことが可能である。
【0086】
また、上述した
図4に示すフローチャートのステップS12においてURI要求で指定されたファイル名が省略されている場合も考えられる。
たとえば、下記の記述(22)に示すように
GET /dir/ HTTP1.1
HOST :proxy
Cookie :p=/foo ・・・(22)
という要求の場合には、リバースプロキシサーバ10のフィルタ部11で“/foo/dir”を参照するように書き換えることが好ましい。
【0087】
また、下記の記述(23)に示すように
GET / HTTP1.1
HOST :proxy
Cookie :p=/foo ・・・(23)
という要求の場合には、リバースプロキシサーバ10のフィルタ部11で“/foo/”を参照するように書き換えることが好ましい。
【0088】
また、URI要求が絶対URI(absoluteURI)だった場合、たとえば下記の記述(24)に示すように、
GET http://proxy/img/baz.jpg HTTP1.1
HOST :proxy
Cookie :p=/foo ・・・(24)
という要求の場合には、リバースプロキシサーバ10のフィルタ部11で
“http://proxy/foo/img/baz.jpg”を参照するように書き換えることが好ましい。
【0089】
また、絶対パス(abs_path)部分が空の場合、たとえば下記の記述(25)に示すように、
GET http://proxy HTTP1.1
HOST :proxy
Cookie :p=/foo ・・・(25)
という要求の場合にはリバースプロキシサーバ10のフィルタ部11で
“http://proxy/foo”を参照するように書き換えることが好ましい。
【0090】
また、上述した第2実施形態におけるリバースプロキシサーバ10Aでは、Refererヘッダを解析することで、機器200への公開パスを得ている。しかしながら、RefererヘッダとしてはRFC2616/RFC2396でいう絶対URI(abusoluteURI)が指定される以外にも、仕様上は相対URI(relativeURI)となる可能性もある。たとえば、下記の記述(26),(27),(28)などである。
Referer://proxy/foo/bar.html ・・・(26)
Referer:/foo/bar.html ・・・(27)
Referer:bar.html ・・・(28)
上記の記述(26)、(27)、(28)のような場合、リバースプロキシサーバ10Aは、Webブラウザ100からの要求URIに含まれる他の情報から不足部分を補って判断することが好ましい。
【0091】
また、上述した第2実施形態におけるリバースプロキシサーバ10Aでは、判定が正しくできない可能性がある。たとえば、機器200の“/bar.html”に“/baz.html”へのハイパーリンクがあり、“/baz.html”に“/img/qux.jpg”へのハイパーリンクがある場合を考える。“/bar.html”を参照したWebブラウザ100が“/baz.html”を要求する場合、リバースプロキシサーバ10AへのURI要求は以下の記述(29)となる。
GET /baz.html HTTP1.1
HOST :proxy
Referer :http://proxy/foo/bar.html ・・・(29)
ここで、リバースプロキシサーバ10AではWebブラウザ100からの要求URIの書き換えを行うと、以下の記述(30)となる。
GET /foo/baz.html HTTP1.1
HOST :orijin
Referer :http://proxy/foo/bar.html ・・・(30)
リバースプロキシサーバ10Aは上記の記述(30)という要求を機器200へ送信して、“/baz.html”を取得する。そして、その後にWebブラウザ100において“/baz.html”に含まれる“/img/qux.jpg”の絶対パスで記載されているハイパーリンクを辿って“qux.jpg”を参照する場合、Webブラウザ100から以下の記述(31)の要求が生成される。
GET /img/qux.jpg HTTP1.1
HOST :proxy
Referer :http://proxy/baz.html ・・・(31)
上記の記述(31)のRefererヘッダに示されるように、“/foo”が含まれていないので、上述した
図7のステップS32で説明した判定では、要求URIの転送起点に該当するものがなく、この判定を実行する前提としての比較要件が満たされていないため、書き換えが行われなくなってしまう。これは、“/baz.html”の参照に際して、Webブラウザ100はあくまでも“http://proxy/baz.html”から辿ったと判断しているためである。そのため、リバースプロキシサーバ10Aを正しく動作させるためには、Webブラウザ100に対して、この要求URIで指定している“/baz.html”は、実際には“http://proxy/foo/baz.html”にあることを通知しなければならない。
【0092】
HTTPには、このようなURIが変わった旨をリバースプロキシサーバ10AからWebブラウザ100に通知する応答コード(たとえば、301(Moved Permanently)、302(Found)、305(Use Proxy)、307(Temporary Redirect)など)が定義されている。HTTPのバージョンやWebブラウザ100によりどの応答コードで対応可能であるかについて差異があるため、要求元のHTTPバージョンやUserAgent行を見てどの応答コードを返すのかについて適宜分岐して応答を返すように設定する必要がある。なお、いずれの応答コードの場合も応答ヘッダのLocation行に変更後のURIを記載する。たとえば、以下の記述(32)に示すような応答ヘッダを生成する。
HTTP/1.1 307 Temporary Redirect
Date:Fri,18 May 2012 01:05:07 GMT
Location:http://proxy/foo/img/baz.jpg
Connection:Close ・・・(32)
【0093】
また、上述した実施の形態で説明したリバースプロキシサーバ10,10A及びこれらの変形例において実行される処理のすべてまたは一部をプログラムによって構成し、これらのプログラムを実行可能な状態で記録した媒体からコンピュータに直接インストールする、またはネットワーク経由で遠隔にあるコンピュータにインストールすることもできる。
【0094】
図8は、
図1および
図5で説明したリバースプロキシサーバ10,10Aのハードウェア構成の一例を示す図である。上述したリバースプロキシサーバ10,10A及びこれらの変形例で構成されるコンピュータでは、CPU301が、たとえば、記憶部308に記憶されている中継プログラムを、入出力インタフェース304およびバス305を介して、RAM103にロードして実行することにより、上述した一連の処理が行われる。
【0095】
コンピュータ(CPU301)が実行する中継プログラムは、たとえば、磁気ディスク(フレキシブルディスクを含む)、光ディスク(CD-ROM(Compact Disc-Read Only Memory),DVD(Digital Versatile Disc)等)、光磁気ディスク、もしくは半導体メモリなどよりなるパッケージメディアであるリムーバブルメディア311に記録して、あるいは、ローカルエリアネットワーク、インターネット、デジタル衛星放送といった、有線または無線の伝送媒体を介して提供される。
【0096】
そして、中継プログラムは、リムーバブルメディア311をドライブ310に装着することにより、入出力インタフェース304を介して、記憶部308にインストールすることができる。また、中継プログラムは、有線または無線の伝送媒体を介して、通信部309で受信し、記憶部308にインストールすることができる。その他、プログラムは、ROM302や記憶部308に、あらかじめインストールしておくことができる。
【0097】
なお、コンピュータが実行する中継プログラムは、本明細書で説明する順序に沿って時系列に処理が行われるプログラムであっても良いし、並列に、あるいは呼び出しが行われたとき等の必要なタイミングで処理が行われるプログラムであっても良い。さらに、中継プログラムは、遠方のコンピュータに転送されて実行されるものであっても良い。また、中継プログラムを実行するハードウェアとして、汎用コンピュータの他に、上述したリバースプロキシサーバ10,10A及びこれらの変形例の機能を備えているものであれば、他の電子機器上に構成されるものであってもよい。
外部ネットワークに属するユーザエージェントからの要求に応じて、内部ネットワークに属する複数の機器のいずれかへと前記要求を中継すると共に、その中継された機器からの応答を前記ユーザエージェントへ転送する中継装置であって、
前記中継装置は、
前記要求を書き換えるか否かを判定する判定部と、
前記判定部が書き換える必要があると判定した場合には前記要求を書き換える処理部と、
前記複数の機器が有しているコンテンツを公開するための公開パス名と、前記中継装置のディレクトリ上で示される仮想的なパス名との関係情報が記憶されている機器情報登録テーブルと、
前記機器情報登録テーブルの仮想的なパス名を参照して、要求先の機器およびその機器の公開パス名を特定し、前記要求を前記機器側のディレクトリ構成にあった形式に変換して要求先の前記機器へと転送する要求発行転送部と、
要求先の前記機器から応答を受信した場合に、その応答を前記フィルタ部へと転送する応答発行転送部と、
を有することを特徴とする中継装置。
外部ネットワークに属するユーザエージェントからの要求に応じて、内部ネットワークに属する複数の機器のいずれかへと前記要求を中継すると共に、その中継された機器からの応答を前記ユーザエージェントへ転送する中継装置が実行する中継方法であって、
前記要求を書き換えるか否かを判定する判定ステップと、
前記判定ステップにおいて書き換える必要があると判定した場合には前記要求を書き換える書き換えステップと、
前記複数の機器が有しているコンテンツを公開するための公開パス名と、前記中継装置のディレクトリ上で示される仮想的なパス名との関係情報が記憶されている機器情報登録テーブルを参照して、前記書き換えステップにより書き換えられた前記要求に含まれる仮想的なパス名から要求先の機器およびその機器の公開パス名を特定し、前記要求を前記機器側のディレクトリ構成にあった形式に変換して要求先の前記機器へと転送する要求発行転送ステップと、
要求先の前記機器から応答を受信した場合に、その応答を前記フィルタ部へと転送する応答発行転送ステップと、
ことを特徴とする中継方法。
コンピュータを、外部ネットワークに属するユーザエージェントからの要求に応じて、内部ネットワークに属する複数の機器のいずれかへと前記要求を中継すると共に、その中継された機器からの応答を前記ユーザエージェントへ転送する中継装置として機能させるためのプログラムであって、
前記コンピュータを、
前記要求を書き換えるか否かを判定する判定部と、
前記判定部が書き換える必要があると判定した場合には前記要求を書き換える処理部と、
前記複数の機器が有しているコンテンツを公開するための公開パス名と、前記中継装置のディレクトリ上で示される仮想的なパス名との関係情報が記憶されている機器情報登録テーブルと、
前記機器情報登録テーブルの仮想的なパス名を参照して、要求先の機器およびその機器の公開パス名を特定し、前記要求を前記機器側のディレクトリ構成にあった形式に変換して要求先の前記機器へと転送する要求発行転送部と、
要求先の前記機器から応答を受信した場合に、その応答を前記フィルタ部へと転送する応答発行転送部と、
して機能させるためのプログラム。