JP5500020B2 - Webアプリケーション提供方法、中継サーバ装置、Webサーバ装置 - Google Patents

Webアプリケーション提供方法、中継サーバ装置、Webサーバ装置 Download PDF

Info

Publication number
JP5500020B2
JP5500020B2 JP2010213274A JP2010213274A JP5500020B2 JP 5500020 B2 JP5500020 B2 JP 5500020B2 JP 2010213274 A JP2010213274 A JP 2010213274A JP 2010213274 A JP2010213274 A JP 2010213274A JP 5500020 B2 JP5500020 B2 JP 5500020B2
Authority
JP
Japan
Prior art keywords
url
web
server
relay server
request
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010213274A
Other languages
English (en)
Other versions
JP2012068902A (ja
Inventor
昭彦 松尾
憲二 大木
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujitsu Ltd
Original Assignee
Fujitsu Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Fujitsu Ltd filed Critical Fujitsu Ltd
Priority to JP2010213274A priority Critical patent/JP5500020B2/ja
Publication of JP2012068902A publication Critical patent/JP2012068902A/ja
Application granted granted Critical
Publication of JP5500020B2 publication Critical patent/JP5500020B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Information Transfer Between Computers (AREA)

Description

本発明は、Webアプリケーションを提供する方法、装置、プログラム、並びにWebアプリケーションを中継する方法、装置、プログラムに係わる。
インターネットが普及し、ユーザは、ブラウザを利用してWebサーバが提供する情報を閲覧することができる。また、ユーザは、Webサーバが提供するアプリケーションプログラムを利用することができる。この場合、ユーザは、例えば、Webアプリケーションサーバへデータを送信する。そうすると、Webアプリケーションサーバは、受信したデータに対して演算を実行し、その結果をクライアント(ユーザの端末)へ返送する。
近年では、ユーザは、しばしば、より利便性の高いサービスを要求する。しかし、この要求に答えるためは、ユーザ毎に様々な機能を用意する必要がある。このため、多数のユーザにサービスを提供するWebサーバ側で上述の要求に対処することは容易ではない。一方、ブラウザ側で上述のサービスを実現するためには、ユーザは、特殊な機能を備える専用のブラウザを用意する必要がある。このため、ブラウザとWebサーバとの間に中継サーバを配置し、中継サーバが各種サービスを付加する構成が提案されている。
図1は、中継サーバがサービスを付加する方法を説明する図である。ここでは、クライアント1とWebサーバ3との間に中継サーバ2が配置されている。また、クライアント1は、Webブラウザを備えている。
図1(a)に示す例では、Webブラウザは、ユーザの指示に応じて、Webページを閲覧するためのリクエストを送信する。このリクエストは、いったん中継サーバ2により受信される。そして、中継サーバ2は、このリクエストをWebサーバ3へ送信する。
Webサーバ3は、受信したリクエストに従ってWebページを生成して中継サーバ2へ送信する。ここで、Webサーバ3が提供するWebページのテキストは、英語で記述されているものとする。また、中継サーバ2には、自動翻訳プログラムが実装されている。そして、中継サーバ2は、Webサーバ3から受信したWebページのテキストを英語から日本語に翻訳する。その後、中継サーバ2は、翻訳後のWebページをクライアント1へ送信する。この結果、クライアント1のWebブラウザには、日本語に翻訳されたWebページが表示される。
図1(b)に示す例では、Webブラウザは、データ処理を依頼するためのリクエストを送信する。このリクエストは、図1(a)に示す手順と同様に、中継サーバ2を経由してWebサーバ3へ転送される。
Webサーバ3は、受信したリクエストに従ってWebアプリケーションプログラムを実行し、処理結果を含むリプライを中継サーバ2へ送信する。中継サーバ2は、Webサーバ3から受信したリプライに、前もってユーザから要求されている機能を実現するためのプログラムコードを挿入する。そして、中継サーバ2は、プログラムコードを含むリプライをクライアント1へ送信する。そうすると、クライアント1において、中継サーバ2によりリプライに挿入されたプログラムコードが実行される。この構成により、Webアプリケーションを変更することなく、ユーザが要求する機能が実現される。図1(b)に示す例では、中継サーバ2により提供されたプログラムコードは、Webサーバ4にアクセスしている。そして、Webブラウザ上で、Webサーバ3が提供するWebアプリケーションおよびWebサーバ4が提供するWebアプリケーションが連携して動作している。
関連する技術として、Web情報を中継する方法が提案されている。この方法においては、中継サーバは、クライアントからのリクエストを受信し、そのリクエストに対応するウェブページを編集する際に、目的サーバが有するマッシュアップ対象のページに記述されたURL情報を抽出する。そして、抽出されたURL情報のホスト名のドットを別の文字に置換するとともに、中継サーバのホスト名を付加し、編集後のウェブページをクライアントへ送信する。(例えば、特許文献1)
他の関連する技術として、元サーバのWebページを中継サーバを介してクライアント端末に転送するシステムが提案されている。このシステムにおいては、クライアント端末は、元サーバのページ情報と書換プログラムを中継サーバから受信し、書換プログラムを実行することでそのページ情報を書き換える。次に、ページ情報の記述に基づき元サーバへのリクエストを生成し、ページ情報の書換情報に従って、そのリクエストに含まれるURL情報中の元サーバのサーバ名を中継サーバのサーバ名に変更する。そして、変更後のユニフォームリソースロケータ情報に基づいてリクエストを中継サーバに送信する。
さらに他の関連する技術として、アプリケーション連携のためのWebアプリケーション編集方法が提案されている。この方法においては、連携対象WebアプリケーションのWebページの一部を切り出して、クライアントのブラウザに表示する場合、制御ロジックを含む連携対象WebアプリケーションのWebページの1ページ分すべてをクライアントブラウザにダウンロードする。そのとき、同時に、Webページのどの部分を切り出すかの情報と、Webページの要素の表示・非表示を制御するコントロール部もダウンロードする。コントロール部は、Webページの切り出したい部分のみを表示させ、他を非表示とする。
特開2009−271676号公報 特開2009−289206号公報 特開2009−223555号公報
上述のように、Webブラウザは、Webサーバ3から中継サーバ2を介して受信するWebページを閲覧することができる。このとき、Webページの中に、別のページ(以下、関連ページ)へのリンク(例えば、URL)が埋め込まれていることがある。この場合、ユーザは、Webブラウザ上でこのリンクを指定すれば、関連ページを閲覧できる。
図2に示す例では、クライアント1のWebブラウザは、Webサーバ3から取得したWebページ(example.com/app1/page3)を表示している。このWebページには、前ページ(example.com/app1/page2)及び次ページ(example.com/app1/page4)へのリンクが埋め込まれている。この場合、ユーザが、たとえば「次ページ」を指定すれば、Webブラウザ上に「次ページ」の内容が表示される。
ところで、ユーザは、Webサーバ3が提供するWebページを、中継サーバ2を経由して取得するときは、例えば、Webサーバ3のURLではなく、中継サーバ2を経由してWebサーバ3へアクセスするために特殊な加工を施したURLを指定する。例えば、図2において、中継サーバ2を経由してWebページ「example.com/app1/page3」を取得するためには、ユーザは、「http://example.com/app1/page3.html」ではなく、「http://http-example-com.proxy.com/app1/page3.html」を指定する。
このため、Webブラウザ上のWebページに埋め込まれているリンク(図2では、例えば「次ページ」)がユーザにより指定されると、Webブラウザから送信されるリクエストは、中継サーバ2を経由することなく目的サーバへ送信される。この場合、目的サーバから送信される「次ページ」の内容は、中継サーバ2を経由することなくWebブラウザへ転送される。この結果、「次ページ」については、中継サーバ2によるサービスが付加されない。例えば、図1(a)に示す例では、「次ページ」は、翻訳されることなくWebブラウザに表示されることになる。
このように、従来技術においては、Webサーバから取得する内容の中にリンク先情報が埋め込まれている場合、ユーザは、そのリンク先から取得する内容について中継サーバによる付加的なサービスを受けられないことがある。
上述の問題に対処するためには、例えば、以下の方法が考えられる。すなわち、中継サーバ2が、Webサーバ3からクライアント1へ提供されるWebページのHTML文書を解釈し、そのHTML文書内のリンク情報を適切に書き換えるようにしてもよい。しかし、この方法では、中継サーバ2は、各リプライのHTML文書を解釈する必要があるので、中継サーバ2の負荷が重くなってしまう。特に、中継サーバ2が多くのユーザにより共有される環境では、中継サーバ2の負荷が重くなると、中継サーバ2が提供するサービスの質が低下するおそれがある。また、中継サーバ2が、HTML文書を解釈することなく、文字列パターンの照合によってリンク情報を書き換える方法では、リンク先として記述されているURLだけでなく、データとして記述されているURLも書き換えられてしまうおそれがある。
また、図2を参照しながら説明した問題に対処するために、以下の方法も考えられる。すなわち、中継サーバ2は、リンク先を呼び出す処理を変更するためのスクリプトコードを、クライアント1へ送信するHTML文書に追加する。この方式であれば、中継サーバ2の負荷は軽い。しかし、この方式では、Webブラウザが上記スクリプトコードをサポートしていないときは、クライアント1は、中継サーバ2を経由するURLを生成できない。すなわち、クライアント1は、上記スクリプトコードをサポートするWebブラウザを実装する必要がある。
本発明の課題は、Webサーバからクライアントへ送信されるリプライに中継サーバがサービスを付加するシステムにおいて、中継サーバの負担を重くすることなく、クライアントが中継サーバの提供するサービスを受けられるようにすることである。
本発明の1つの態様のWebアプリケーション提供方法は、Webサーバから中継サーバを介してクライアントへWebアプリケーションを提供する方法であって、前記中継サーバは、前記クライアントから受信するリクエストに、前記Webサーバが提供するWebページ中に設定されているURLへのアクセスが前記中継サーバを経由するように、前記URLを書き換えるための置換情報を追加し、前記中継サーバは、前記置換情報を含むリクエストを前記Webサーバへ送信し、前記Webサーバは、前記リクエストに従って応答Webページを生成し、前記Webサーバは、前記応答Webページ中に設定されるURLを前記置換情報に基づいて書き換え、前記Webサーバは、前記置換情報に基づいて書き換えられたURLを含む前記応答Webページを前記中継サーバへ送信し、前記中継サーバは、前記応答Webページを前記クライアントへ送信する。
本発明の1つの態様のプログラムは、クライアントとWebサーバとの間に配置される中継サーバに、前記クライアントから受信するリクエストに、前記Webサーバが提供するWebページ中に設定されるURLへのアクセスが前記中継サーバを経由するように、前記URLを書き換えるための置換情報を追加し、前記置換情報を含むリクエストを前記Webサーバへ送信し、前記Webサーバにおいて前記リクエストに応じて生成されたWebページを含むリプライを前記Webサーバから受信し、前記リプライを前記クライアントへ送信する、処理を実行させる。
本発明の他の態様のプログラムは、Webサーバに、クライアントから送信され、中継サーバにおいて置換情報が追加されたリクエストを受信し、前記リクエストに従ってWebページを生成し、前記Webページ中に設定されるURLを、前記置換情報に基づいて、前記URLへのアクセスが前記中継サーバを経由するように書き換え、前記置換情報に基づいて書き換えられたURLを含む前記Webページを前記中継サーバへ送信する、処理を実行させる。
本出願において開示される構成または方法によれば、Webサーバからクライアントへ送信されるリプライに中継サーバがサービスを付加するシステムにおいて、中継サーバの負担を重くすることなく、クライアントは中継サーバの提供するサービスを受けることができる。
中継サーバがサービスを提供する方法を説明する図である。 従来技術の問題点を説明する図である。 実施形態のWebアプリケーション提供方法の概要を説明する図である。 実施形態の中継サーバの構成を示す図である。 実施形態のWebサーバの構成を示す図である。 ブラウザから送信されるリクエストの実施例である。 リクエストに置換情報を追加する処理を示すフローチャートである。 置換情報が追加されたリクエストの実施例である。 置換情報抽出部の処理を示すフローチャートである。 URLエンコード部が保持するエンコード情報の実施例である。 ページ記述情報の実施例である。 タグ処理部の処理を示すフローチャートである。 タグ処理部によるURLの置換処理の実施例である。 URLエンコード部の処理を示すフローチャートである。 URLエンコード部によるエンコード処理の実施例である。 ページ生成部により生成されるWebページの実施例である。 Webサーバから送信されるリプライの実施例(URLエンコード処理あり)である。 Webサーバから送信されるリプライの実施例(URLエンコード処理なし)である。 リプライを受信した中継サーバの処理を示すフローチャートである。 中継サーバからクライアントへ送信されるリプライの実施例である。 他の実施形態においてリプライを受信した中継サーバの処理を示すフローチャートである。 中継サーバおよびWebサーバのハードウェア構成を示す図である。
図3は、実施形態のWebアプリケーション提供方法の概要を説明する図である。ここでは、クライアント1とWebサーバ30との間に中継サーバ10が配置されている。なお、クライアント1は、Webブラウザを備えている。また、Webサーバ30は、クライアント1のアクセス先である目的サーバであり、WebアプリケーションまたはWebページを提供する。
クライアント1は、ネットワークを介して中継サーバ10に接続される。このネットワークは、例えばLANである。ただし、クライアント1は、他の形態のネットワークで中継サーバ10に接続するようにしてもよい。また、中継サーバ10およびWebサーバ30は、ネットワークを介して接続される。このネットワークは、例えばインターネットである。ただし、中継サーバ10およびWebサーバ30は、他の形態のネットワークで互いに接続してもよい。なお、クライアント1と中継サーバ10との間の回線、および中継サーバ10とWebサーバ30との間の回線は、無線リンクで実現してもよいし、有線リンクで実現してもよいし、無線リンクおよび有線リンクが混在してもよい。
クライアント1は、ユーザの指示を受け付けるためのユーザインタフェースを備える。また、クライアント1は、ネットワーク上のWebページを閲覧するWebブラウザを備える。Webページは、Web上にある文書であり、例えば、HTML文書、スタイルシート、画像データ等を含んでいる。そして、クライアント1は、ユーザにより指定される目的サーバにリクエストを送信することにより、対応するWebアプリケーションのWebページを受け取る。すなわち、ユーザは、クライアント1に実装されているWebブラウザを通して、Webアプリケーションを利用することができる。
上記構成のネットワークシステムにおいて、ユーザは、まず、クライアント1のWebブラウザを利用して、Webサーバ30にアクセスするためのリクエストを中継サーバ10へ送信する。中継サーバ10は、クライアント1から受信したリクエストのリクエストヘッダに置換情報を追加する。置換情報は、Webサーバ30が提供するWebページ中に設定されているURLへのアクセスが中継サーバ10を経由するようにそのURLを書き換えるための指示を含んでいる。そして、中継サーバ10は、置換情報が追加されたリクエストをWebサーバ30へ送信する。
リクエストを受信したWebサーバ30は、リクエストヘッダに置換情報が含まれているか否かをチェックする。そして、リクエストヘッダが置換情報を含んでいるときは、Webサーバ30は、その置換情報を保持しておく。また、Webサーバ30は、受信したリクエストに従って対応するWebページを生成する。このWebページがリンクを含む場合、Webサーバ30は、そのリンク先を表すURLを生成してWebページに埋め込む。このとき、Webサーバ30は、中継サーバ10により追加された置換情報に基づいて、リンク先へのアクセスが中継サーバ10を経由するようにURLを生成する。一実施例としては、Webサーバ30は、リンク先を直接的に指し示すURLを、置換情報に基づいて、中継サーバ10を経由してリンク先にアクセスするためのURLに書き換える。以下、この書き換え処理を「エンコード」と呼ぶことがある。さらに、Webサーバ30は、上述のリクエストに対するWebページを含むリプライに、URLのエンコードを実行したことを表す完了報告情報を追加する。このとき、完了報告情報は、例えば、リプライヘッダに追加される。そして、Webサーバ30は、中継サーバ10へリプライを送信する。
中継サーバ10は、Webサーバ30からリプライを受信すると、リプライヘッダが完了報告情報を含んでいるか否かをチェックする。そして、リプライが完了報告情報を含むときは、中継サーバ10は、リプライとして提供されるWebページにリンク先として埋め込まれているURLを書き換える処理を実行しない。一方、リプライが完了報告情報を含んでいなければ、中継サーバ10は、Webページに埋め込まれているURLを、リンク先へのアクセスが中継サーバ10を経由するURLに書き換える。そして、中継サーバ10は、必要に応じてそのリプライに対してサービスを付加した後、そのリプライをクライアント1へ送信する。
クライアント1のWebブラウザは、上述のようにしてWebサーバ30から中継サーバ10を経由して送信されるWebページを表示する。このとき、Webページに埋め込まれているURLは、Webサーバ30(または、中継サーバ10)において、中継サーバ10を経由してリンク先にアクセスが行われるようにエンコードされている。よって、ユーザがWebブラウザを利用してこのURLを指定すると、対応する新たなWebページは、中継サーバ10を経由してクライアント1に提供される。したがって、クライアント1は、この新たなWebページについても、中継サーバ10が提供するサービスを受けることができる。
また、実施形態のWebアプリケーション提供方法によれば、Webサーバ30が実施形態に係わるURLエンコード方式をサポートしていれば、中継サーバ10は、Webサーバ30からのリプライ中のHTML文書を解析しなくてもよい。したがって、中継サーバ10の負担は軽くなる。この場合、Webサーバ30は、後で詳しく説明するが、Webページを生成する際に、そのWebページに設定するリンク先を表す文字列を加工するだけでエンコード処理を実現する。したがって、Webサーバ30によるURLエンコードは、HTML文書全体を解析してそのHTML文書中に埋め込まれているリンク先情報を書き換える手順と比較して、処理量が少ない。よって、URLエンコードに起因するWebサーバ30の負担の増加量は小さい。
さらに、Webサーバ30は、Webページを生成する際に、そのWebページに設定するリンクのみを抽出してエンコードを行う。このため、実施形態の方法によれば、HTML文書中に記述されている、リンク先ではないURL情報が誤って書き換えられることはなく、必要なURLのみを確実に書き換えることができる。
さらに、実施形態の方法においては、Webページ中のURLはWebサーバ30(または、中継サーバ10)において書き換えられるので、クライアント1のWebブラウザは、URLを書き換えるためのスクリプトを実行する必要はない。したがって、上記スクリプトをサポートしていないWebブラウザを実装するクライアント1であっても、中継サーバ10が提供するサービスを受けることができる。
なお、Webサーバ30が実施形態のURLエンコード機能を備えていないときは、Webサーバ30から中継サーバ10へ送信されるリプライは、完了報告情報を含まない。すなわち、中継サーバ10は、リプライヘッダを参照すれば、Webサーバ30においてURLエンコード処理が実行されたか否かを認識できる。したがって、中継サーバ10がURLを書き換える機能を備えている場合には、Webサーバ30においてURLエンコードを行う方式と、中継サーバ10においてURLを書き換える方式を併用することが可能である。
図4は、実施形態の中継サーバ10の構成を示す図である。中継サーバ10は、要求受付部11、セッション管理部12、サブドメイン解釈部13、置換情報追加部14、要求転送部15、応答受付部16、応答解釈部17、URL書換え部18、応答変換部19、応答転送部20、ユーザ情報データベース(DB)21を備える。
要求受付部11は、クライアント1のWebブラウザから送信されるリクエストデータを受信する。また、要求受付部11は、セッション管理部12に問合わせを行うことにより、リクエストデータの送信元のユーザIDを特定する。このとき、要求受付部11は、必要に応じてユーザ認証を実行する。認証処理は、特に限定されるものではないが、例えば、CookieまたはIPアドレスを利用する方式により実現される。なお、セッション管理部12は、ユーザ情報DB21を参照しながら各クライアントセッションを管理する。
サブドメイン解釈部13は、要求受付部11が受け付けたリクエストデータの宛て先URLをデコードして目的サーバのURLを取得する。目的サーバは、この例では、Webサーバ30である。なお、クライアント1から送信されるリクエストの宛て先URLは、中継サーバ10を経由してWebサーバ30へアクセスするように作成されているものとする。
置換情報追加部14は、リクエストデータのヘッダ部(すなわち、リクエストヘッダ)に、置換情報を追加する。置換情報は、Webページに埋め込まれているURLへのアクセスが中継サーバ10を経由するようにそのURLを書き換えるための指示を含む。具体的には、置換情報は、URLのエンコード方式を表す方式情報、およびURLのエンコード処理において使用される文字列パターンを含む。なお、置換情報追加部14は、発明に係る追加部の1つの実施例である。
要求転送部15は、サブドメイン解釈部13から目的サーバのURLを受け取り、置換情報追加部14から置換情報が追加されたリクエストデータを受け取る。そして、要求転送部15は、置換情報を含むリクエストデータを目的サーバへ送信する。なお、目的サーバ(ここでは、Webサーバ30)は、中継サーバ10からリクエストデータを受信すると、対応するリプライデータを生成して中継サーバ10へ送信する。
応答受付部16は、目的サーバから送信されるリプライデータを受信する。応答解釈部17は、応答受付部16により受信されたリプライデータのヘッダ部(すなわち、リプライヘッダ)を解釈し、中継サーバ10においてURLを書き換えるか否かを判定する。また、応答解釈部17は、セッション管理部12を参照し、応答変換処理を実行するか否かを判定する。なお、応答解釈部17は、発明に係る判定部の1つの実施例である。
URL書換え部18は、応答解釈部17によりURLの書換えが必要と判定されたときに、リプライデータのHTML文書内にリンク先として記述されているURLを書き換える。このとき、URL書換え部18は、リプライデータから抽出されるURLを、中継サーバ10を経由するアクセスを実現するためのURLに書き換える。
応答変換部19は、応答変換が必要であると応答解釈部17により判定されたときに、リプライデータを加工する。このとき、応答変換部19は、セッション管理部12を参照して、クライアント1のユーザが要求するサービスを識別する。そして、応答変換部19は、クライアント1のユーザが要求するサービスに応じてリプライデータを加工する。例えば、ユーザが翻訳サービスを要求しているときは、応答変換部19は、リプライデータ中のテキストを翻訳する。或いは、応答変換部19は、ユーザが要求する機能を実現するためのスクリプトコードをリプライデータに挿入する。
応答転送部20は、リプライデータをクライアント1のWebブラウザに送信する。このとき、リプライデータ中でリンク先として設定されているURLは、Webサーバ30(或いは、URL書換え部18)により書き換えられている。また、このリプライデータは、応答変換部19によって加工されていることがある。
ユーザ情報DB21は、中継サーバ10を利用するユーザの情報を格納する。即ち、ユーザ情報DB21は、例えば、各ユーザのユーザIDおよびパスワードの組を格納する。また、ユーザ情報DB21は、各ユーザが中継サーバ10に要求するサービスの種別を表す情報を格納する。
図5は、実施形態のWebサーバ30の構成を示す図である。Webサーバ30は、要求受付部31、置換情報抽出部32、ページ生成部33、ページ記述情報格納部34、アプリケーション処理部35、タグ処理部36、URLエンコード部37、応答送信部38を備える。
要求受付部31は、クライアント1のWebブラウザまたは中継サーバ10から送信されるリクエストデータを受信する。また、要求受付部31は、リクエストデータの送信元のユーザIDを特定する。このとき、要求受付部31は、必要に応じてユーザ認証を実行する。認証処理は、特に限定されるものではないが、例えば、中継サーバ10と同様の方式を採用してもよい。
置換情報抽出部32は、リクエストデータのヘッダ部(すなわち、リクエストヘッダ)に、置換情報が付加されているか否かをチェックする。リクエストヘッダに置換情報が付加されているときは、置換情報抽出部32は、リクエストヘッダから置換情報を抽出してURLエンコード部37に与える。また、置換情報抽出部32は、リクエストヘッダからさらにプロトコル名、ホスト名、パス名を抽出してURLエンコード部37に与える。そして置換情報抽出部32は、リクエストデータと共に、このリクエストデータの送信元のユーザID等をページ生成部33へ送信する。
ページ生成部33は、Webアプリケーションのフレームワークを利用して、リクエストデータに応じたWebページを生成する。この実施例では、ページ生成部33は、例えばStrutsと呼ばれるフレームワークを利用してWebページを生成する。すなわち、ページ生成部33は、ページ記述情報格納部34から、リクエストデータに含まれているパス名に対応するページ記述情報を取得する。そして、ページ生成部33は、取得したページ記述情報に応じてアプリケーション処理部35を呼び出す。ここで、Strutsフレームワークでは、ページ記述情報内のHTML要素を生成する部分は、カスタムタグを用いて記述されている。このため、ページ生成部33は、StrutsのカスタムタグをHTMLに展開するために、タグ処理部36を呼び出す。そして、ページ生成部33は、アプリケーション処理部35の処理結果およびタグ処理部36の処理結果を利用してリプライデータを生成し、応答送信部38に与える。
ページ記述情報格納部34は、Webサーバ30が提供するWebページを特定するパス名に対応するページ記述情報を格納する。ページ記述情報の形式は、特に限定されるものではない。また、アプリケーション処理部35は、ページ生成部33から呼び出され、ページ記述情報に応じた処理を実行してその処理結果をページ生成部33に返す。
タグ処理部36は、ページ生成部33から呼び出され、StrutsのカスタムタグをHTML要素に展開する。ここで、展開により得られたHTML要素がリンク先を表す情報(ここでは、URL)を含むときは、タグ処理部36は、URLエンコード部37にそのURLのエンコードを依頼する。また、タグ処理部36は、URLエンコード部37によりエンコードされたURLをリンク先としてHTML要素を生成する。そして、タグ処理部36は、展開結果をページ処理部33に返す。
URLエンコード部37は、置換情報抽出部32によってリクエストデータから抽出されたエンコード処理のための情報(置換情報を含む)を保持している。また、URLエンコード部37は、タグ処理部36からの依頼に応じて、置換情報を利用してURLをエンコードする。そして、URLエンコード部37は、エンコード結果をタグ処理部36に返す。なお、URLエンコード部37は、発明に係るWebサーバ装置が備える書換え部の1つの実施例である。
応答送信部38は、ページ生成部33により生成されたページを受け取ると、URLエンコード処理を実行したか否かをURLエンコード部37に問い合わせる。URLエンコード処理が実行されているときは、応答送信部38は、リプライデータのヘッダ部(すなわち、リプライヘッダ)に、URLエンコード処理を実行したことを表す完了報告情報のためのフィールドを追加する。そして、応答送信部38は、ページ生成部33により生成されたWebページを含むリプライデータを中継サーバ10へ送信する。
次に、実施形態のWebアプリケーション提供方法の一例を説明する。なお、以下の説明では、図3に示すように、クライアント1とWebサーバ30との間に中継サーバ10が配置されているものとする。Webサーバ30は、クライアント1のWebブラウザの目的サーバである。また、中継サーバ10は図4に示す構成を有し、Webサーバ30は図5に示す構成を有している。さらに、中継サーバ10はhttp://proxy.comで識別され、Webサーバ30はhttp://example.comで識別されるものとする。
<リクエストの送信>
クライアント1のユーザは、この実施例では、Webサーバ30が提供するWebアプリケーション(app1)のWebページ(page3)を要求するものとする。この場合、クライアント1のWebブラウザは、図6に示すHTTPリクエストを生成して中継サーバ10へ送信する。この例では、アクセス先として「http-example-com.proxy.com」が設定されている。この記述は、「HTTPでproxy.comを経由してexample.comにアクセスする」を意味する。
中継サーバ10は、クライアント1から図6に示すHTTPリクエストを受信すると、アクセス先を表すURLをデコードする。すなわち、中継サーバ10は、受信したリクエストに設定されているURLを、目的サーバ(すなわち、Webサーバ30)を表すURLに書き換える。この例では、中継サーバ10は、「http-example-com.proxy.com」を「example.com」に書き換える。なお、URLをデコードする手順は、例えば、特開2009−271676号公報に記載されている。また、中継サーバ10は、リクエストヘッダに置換情報を追加する。
図7は、リクエストヘッダに置換情報を追加する処理を示すフローチャートである。このフローチャートの処理は、中継サーバ10がクライアント1からHTTPリクエストを受信したときに、置換情報追加部14により実行される。
ステップS1において、置換情報追加部14は、中継サーバ10が実行するURLエンコード方式を表す文字列を生成する。この実施例では、URLエンコード方式を表す文字列は、下記の定数文字列である。
hyphen-concatinate-hostname
なお、「文字列を生成」は、中継サーバ10が備えるメモリ領域に予め格納されている文字列を取得する処理を含むものとする。
ステップS2において、置換情報追加部14は、受信したリクエストのリクエストヘッダに、ステップS1で生成した文字列を追加するためのフィールドを追加する。この実施例では、置換情報追加部14は、リクエストヘッダにX-url-encodetypeフィールドを追加する。そして、置換情報追加部14は、X-url-encodetypeフィールドに、ステップS1で生成した文字列を設定する。
ステップS3において、置換情報追加部14は、中継サーバ10が実行するURLエンコードにおいてテンプレートとして使用する文字列を生成する。この実施例では、テンプレートとして使用するURLエンコードパターンは、下記の定数文字列である。
http://%PROTOCOL%-%HOSTNAME%.proxy.com/%PATHNAME%
「proxy.com」は、中継サーバ10のホスト名である。なお、「文字列を生成」は、ステップS1と同様に、中継サーバ10が備えるメモリ領域に予め格納されている文字列を取得する処理を含むものとする。
ステップS4において、置換情報追加部14は、受信したリクエストのリクエストヘッダに、ステップS3で生成した文字列を追加するためのフィールドを追加する。この実施例では、置換情報追加部14は、リクエストヘッダにX-url-encodepatternフィールドを追加する。そして、置換情報追加部14は、X-url-encodepatternフィールドに、ステップS3で生成した文字列を設定する。
図8は、置換情報が追加されたHTTPリクエストの実施例を示す。ここで、図6と図8とを比較すると、アクセス先を表すHOSTが「http-example-com.proxy.com」から「example.com」に書き換えられている。また、図8に示すリクエストには、置換情報として2つのフィールド(X-url-encodetype、X-url-encodepattern)が追加されている。
中継サーバ10は、上述の置換情報を含むリクエストを目的サーバへ送信する。このリクエストは、「example.com」に従って転送される。よって、Webサーバ30は、上記リクエストを受信する。
<Webサーバ30の動作>
Webサーバ30は、中継サーバ10から図8に示すリクエストを受信すると、ユーザ認証を実行する。そして、ユーザ認証が成功すると、置換情報抽出部32は、リクエストヘッダから置換情報を抽出する。
図9は、置換情報抽出部32の処理を示すフローチャートである。このフローチャートの処理は、Webサーバ30がHTTPリクエストを受信したときに実行される。
ステップS11において、置換情報抽出部32は、受信したリクエストが要求するWebページのプロトコル名、ホスト名、パス名をURLエンコード部37に通知する。この実施例では、置換情報抽出部32は、図8に示すリクエストから、プロトコル名、ホスト名、パス名として、それぞれ「HTTP」「example.com」「app1/page3/html」を抽出する。そして、置換情報抽出部32は、抽出結果をURLエンコード部37に通知する。
ステップS12〜S13において、置換情報抽出部32は、リクエストヘッダに設定されているX-url-encodetypeフィールドの値を取得する。このとき、置換情報抽出部32は、リクエストヘッダがX-url-encodetypeフィールドを有するか否かをチェックする。また、置換情報抽出部32は、X-url-encodetypeフィールドの値が、Webサーバ30が実行可能なエンコード方式を表しているか否かをチェックする。この実施例では、Webサーバ30は、「hyphen-concatinate-hostname」で識別されるエンコード方式を実行可能であるものとする。
リクエストヘッダがX-url-encodetypeフィールドを有し、且つX-url-encodetypeフィールドの値が、Webサーバ30が実行可能なエンコード方式を表していれば、処理はステップS14へ移行する。一方、リクエストヘッダがX-url-encodetypeフィールドを有していない場合、或いは、X-url-encodetypeフィールドの値が、Webサーバ30が実行可能なエンコード方式を表していない場合は、処理はステップS17へ移行する。図8に示す例では、置換情報抽出部32は、X-url-encodetypeフィールドから下記の値を取得する。
hyphen-concatinate-hostname
この場合、置換情報抽出部32は、ステップS13で「Yes」と判定する。よって、置換情報抽出部32は、ステップS14を実行する。
ステップS14〜S15において、置換情報抽出部32は、リクエストヘッダに設定されているX-url-encodepatternフィールドの値を取得する。X-url-encodepatternフィールドに値が設定されていなければ、処理はステップS17へ移行する。図8に示す例では、置換情報抽出部32は、X-url-encodepatternフィールドから下記の文字列を取得する。
http://%PROTOCOL%-%HOSTNAME%.proxy.com/%PATHNAME%
ステップS16において、置換情報抽出部32は、ステップS12およびS14で取得して値をURLエンコード部37に通知する。ここで、ステップS12で得られた値は、中継サーバ10およびWebサーバ30が実行するURLエンコード方式を識別する。また、ステップS14で得られた文字列は、Webサーバ30が実行するURLエンコードにおいてテンプレートとして使用されるエンコードパターンを有している。
リクエストヘッダがX-url-encodetypeフィールドまたはX-url-encodepatternフィールドを有していないとき、或いは、X-url-encodetypeフィールドまたはX-url-encodepatternフィールドの値が不適切なときは、ステップS17が実行される。ステップS17において、置換情報抽出部32は、URLエンコード処理を実行しないことを表す値をURLエンコード部37に通知する。
図10は、URLエンコード部37が保持するエンコード情報の実施例を示す。URLエンコード部37は、置換情報抽出部32から通知されるエンコード情報を保持する。このとき、URLエンコード部37は、例えば、Webサーバ30が受信したHTTPリクエストのセッションに対応づけて、置換情報抽出部32から通知されるエンコード情報を保持する。具体的には、URLエンコード部37は、リクエストヘッダから置換情報として抽出される「エンコード方式」および「エンコードパターン文字列」を保持する。さらに、URLエンコード部37は、置換情報と共に「現在のプロトコル名(要求されたプロトコル名)」「現在のホスト名(要求されたホスト名)」「現在のパス名(要求されたパス名)」を保持する。なお、URLエンコード部37は、Webサーバ30内の所定のメモリ領域にエンコード情報を格納する。
続いて、ページ生成部33は、HTTPリクエストにより要求されたWebページを生成する。このとき、ページ生成部33は、まず、HTTPリクエストに従って、ページ記述情報格納部34から対応するページ記述情報を取得する。この例では、ページ生成部33は、StrutsフレームワークでWebページを生成するものとする。
図11は、ページ記述情報の実施例を示す。図11は、図8に示すHTTPリクエストに応じてページ記述情報格納部34から抽出されたページ記述情報を示している。すなわち、このページ記述情報は、Webサーバ30のパスapp1/page3/htmlで特定されるWebページの内容を記述している。以下の説明では、app1/page3/htmlで特定されるWebページのことを「目的Webページ」と呼ぶことがある。なお、ページ記述情報の要素は、この実施例では、HTMLタグではなく、taglibによって定義されるカスタムタグで記述されている。
目的Webページは、他のWebページへのリンクを含んでいる。図11に示す実施例では、目的Webページには、html:linkタグを利用して「前ページ(page2.html)」および「次ページ(page4.html)」が設定されている。
ページ生成部33は、ページ記述情報に応じてアプリケーション処理部35を呼び出して処理を依頼する。そして、ページ生成部33は、アプリケーション処理部35の処理結果を受け取る。なお、アプリケーション処理部35の処理は、公知の技術により実現可能なので、説明は省略する。
さらに、ページ生成部33は、Strutsのカスタムタグ(即ち、taglibにより定義されるタグ)をHTMLに展開するために、タグ処理部36を呼び出す。そして、タグ処理部36は、StrutsのカスタムタグをHTML要素に展開する。
図12は、タグ処理部36の処理を示すフローチャートである。タグ処理部36は、ページ生成部33からカスタムタグを受け取ると、このフローチャートの処理を実行する。
ステップS21において、タグ処理部36は、処理対象のタグ(ページ生成部33から受け取ったタグ)がhtml:linkタグか否かをチェックする。対象タグがhtml:linkタグであれば、処理はステップS22に移行する。一方、対象タグがhtml:linkタグでなければ、タグ処理部36はステップS22〜S26をスキップする。
ステップS22〜S23において、タグ処理部36は、対象タグのページ属性の値を取得する。そして、タグ処理部36は、ページ属性の値が完全修飾されたURLか否かをチェックする。「完全修飾された(Fully Qualified)」とは、ここでは、プロトコル名、ドメイン名、サブドメイン名、ホスト名、パス名等がすべて省略せずに指定されている記述を意味する。
ページ属性の値が完全修飾されたURLでなければ、タグ処理部36は、ステップS24において、現在のWebページのプロトコル名、ホスト名、パス名を用いて、完全修飾されたURLを作成する。現在のWebページは、ページ生成部33が受信したHTTPリクエストに応じて生成しているページに相当する。したがって、タグ処理部36は、例えば、受信したHTTPリクエストのリクエストヘッダから現在のWebページのプロトコル名、ホスト名、パス名を取得することができる。なお、ページ属性の値が完全修飾されたURLであれば、タグ処理部36は、ステップS24をスキップする。
ステップS25において、タグ処理部36は、ページ属性の値として取得したURLまたはステップS24で作成したURLをURLエンコード部37へ送信し、エンコード処理を依頼する。また、タグ処理部36は、ステップS26において、URLエンコード部37によるエンコード結果であるURLを受け取る。そして、タグ処理部36は、エンコードされたURLをページ属性に設定する。なお、URLエンコード部37の処理については、後で詳しく説明する。
ステップS27において、タグ処理部36は、Strutsフレームワークのタグ置換処理を実行する。ここで、タグ処理部36は、予め作成されたタグライブラリを備える。そして、タグ処理部36は、このタグライブラリを利用して、カスタムタグをHTMLタグに置換する。
図13は、タグ処理部36によるURLの置換処理の実施例を示す。ここでは、ページ生成部33からタグ処理部36へ図11に示す「前ページ」を表すhtml:linkタグが与えられたものとする。この場合、図12に示すフローチャートでは、タグ処理部36は、ステップS21において「Yes」と判定する。
ページ記述情報に記述されているURL(すなわち、html:linkタグのページ属性の値)は、図13に示すように「page2.html」である。しかし、このURLは、プロトコル名、ホスト名、パス名が省略されて記述されている。したがって、図12に示すフローチャートでは、ステップS24が実行される。
現在のWebページの「プロトコル名」「ホスト名」「パス名」は、図8に示すHTTPリクエストによれば、それぞれ「HTTP」「example.com」「app1」である。したがって、タグ処理部36は、ステップS24において、下記の完全修飾されたURLを作成する。
http://example.com/app1/page2.html
この後、タグ処理部36は、URLエンコード部37に対してURLのエンコード処理を依頼する。URLエンコード部37の処理については、図14〜図15を参照しながら説明する。
図14は、URLエンコード部37の処理を示すフローチャートである。このフローチャートの処理は、URLエンコード部37がタグ処理部36から呼び出されたときに実行される。なお、タグ処理部36は、上述したように、html:linkタグを置換する処理の中でURLエンコード部37を呼び出す。
ステップS31において、URLエンコード部37は、上述した所定のメモリ領域に保持されているエンコード情報を参照し、「エンコード方式」の値が有効か否か、およびWebサーバ30がその値に対応するエンコード方式を実行可能か否か判定する。また、ステップS32において、URLエンコード部37は、上記エンコード情報を参照し、「エンコードパターン文字列」の値が有効か否かを判定する。この実施例では、Webサーバ30は、「hyphen-concatinate-hostname」で識別されるエンコード方式を実行可能であるものとする。なお、「エンコード方式」または「エンコードパターン文字列」の値が有効でない状態は、例えば、値が設定されていないとき、或いはヌルデータが設定されているときに発生する。
ここで、エンコード情報として保持されている「エンコード方式」は、中継サーバ10から送信される置換情報の一部であり、中継サーバ10から要求されたエンコード方式を表す。したがって、URLエンコード部37は、中継サーバ10から要求されたエンコード方式でURLをエンコードできるときは、ステップS33〜S37の処理を実行する。
ステップS37において、URLエンコード部37は、エンコード前のURLから、プロトコル名部分、ホスト名部分、パス名部分を抽出する。なお、エンコード前のURLは完全修飾されたURLであり、タグ処理部36から与えられる。
ステップS34において、URLエンコード部37は、ステップS33で抽出したプロトコル名、ホスト名、パス名を、それぞれ指定されたエンコード方式でエンコードする。なお、指定されたエンコード方式は、中継サーバ10から要求されたエンコード方式である。このエンコード方式の手順は、後で図15を参照しながら説明する。
ステップS35〜S37において、URLエンコード部37は、エンコード情報として保持している「エンコードパターン文字列」を利用して、URLエンコード処理を実行する。この実施例では、「エンコードパターン文字列」は以下の文字列である。
http://%PROTOCOL%-%HOSTNAME%.proxy.com/%PATHNAME%
即ち、ステップS35において、URLエンコード部37は、エンコードパターン文字列内の「%PROTOCOL%」を、ステップS34で得られたプロトコル名に置換する。また、ステップS35において、URLエンコード部37は、「%HOSTNAME%」をステップS34で得られたホスト名に置換する。さらに、ステップS35において、URLエンコード部37は、「%PATHNAME%」をステップS34で得られたパス名に置換する。
ステップS38において、URLエンコード部37は、ステップS35〜S37で得られた結果文字列をタグ処理部36に返す。
なお、「エンコード方式」の値が有効でないとき(ステップS31:No)、Webサーバ30が指定されたエンコード方式を実行できないとき(ステップS31:No)、或いは「エンコードパターン文字列」の値が有効でないときは、URLエンコード部37はステップS39を実行する。この場合、URLエンコード部37は、タグ処理部36から受け取ったURLをそのままタグ処理部36に返す。
図15は、URLエンコード部37によるエンコード処理の実施例を示す。ここでは、URLエンコード部37は、タグ処理部36から下記のURLを受け取るものとする。
http://example.com/app1/page2.html
また、URLエンコード部37は、図10に示すエンコード情報を保持しているものとする。
URLエンコード部37は、図10に示すエンコード情報の「エンコード方式」を参照する。この例では、エンコード方式として下記の文字列が記録されている。
hyphen-concatinate-hostname
ここで、Webサーバ30は、このエンコード方式を実行できる。また、URLエンコード部37は、図10に示すエンコード情報の「エンコードパターン文字列」を参照する。この例では、エンコードパターン文字列として下記の文字列が記録されている。
http://%PROTOCOL%-%HOSTNAME%.proxy.com/%PATHNAME%
したがって、URLエンコード部37は、ステップS33〜S38を実行する。
URLエンコード部37は、ステップS33において、タグ処理部36から受け取ったURLからプロトコル名、ホスト名、パス名を抽出する。この例では、URLエンコード部37は、URLのプロトコル名、ホスト名、パス名として、図15に示すように、それぞれ「http」「example.com」「/app1/page2.html」を抽出する。
続いて、URLエンコード部37は、ステップS34において、中継サーバ10により指定されたエンコード方式(hyphen-concatinate-hostname)で、プロトコル名、ホスト名、パス名をそれぞれエンコードする。このエンコード方式は、以下の規則を含む。
(1)プロトコル名は、変更しない
(2)ホスト名は、ドットをハイフンに置き換える
(3)パス名は、先頭に付されているスラッシュを削除する
したがって、「http」「example.com」「/app1/page2.html」に対して上述のエンコード処理を実行することにより、「http」「example-com」「app1/page2.html」が得られる。
さらに、URLエンコード部37は、ステップS35〜S37において、エンコードパターン文字列の「%PROTOCOL%」「%HOSTNAME%」「%PATHNAME%」をそれぞれ「http」「example-com」「app1/page2.html」に置換する。この結果、下記のURLが生成される。
http://http-example-com.proxy.com/app1/page2/html
そして、URLエンコード部37は、このようにして生成したURLをタグ処理部36に返す。
図16は、ページ生成部33により生成されるWebページの実施例を示す。なお、図16は、HTML文書内のリンク情報に係わる記述のみを示している。
図16において、リンク先を表すURLは、上述したように、ページ記述情報内のURLを置換情報に従ってエンコード/置換することにより生成される。そして、このURLの「http-example-com.proxy.com」という記述は、「HTTPでproxye.comを経由してexample.comにアクセスする」を意味する。
ページ生成部33は、上述のようにして生成したWebページを応答送信部38に与える。そうすると、応答送信部38は、このWebページを含むリプライを中継サーバ10へ送信する。このとき、応答送信部38は、URLエンコード処理を実行したか否かをURLエンコード部37に問い合わせる。そして、URLエンコード処理が実行されているときは、応答送信部38は、リプライヘッダに、URLエンコード処理を実行したことを表す完了報告情報のためのフィールドを追加する。
図17は、Webサーバ30から送信されるリプライの実施例を示す。ここでは、Webサーバ30は、中継サーバ10から置換情報に基づいてURLエンコード処理を実行したものとする。したがって、この実施例では、Webサーバ30が実行するURLエンコード処理はhyphen-concatinate-hostnameである。
この場合、応答送信部38は、リプライヘッダにX-url-decodetypeフィールドを追加する。図17では、リプライヘッダの3行目にX-url-decodetypeフィールドが追加されている。さらに、応答送信部38は、X-url-decodetypeフィールドの値として、Webサーバ30が実行したURLエンコード処理を識別する下記の文字列を設定する。hyphen-concatinate-hostname
この結果、図17に示すリプライが生成される。そして、Webサーバ30は、図8に示すHTTPリクエストの送信元である中継サーバ10へこのリプライを送信する。
なお、Webサーバ30は、中継サーバ10から置換情報を受信しなかったときは、上述のURLエンコード処理を実行しない。また、Webサーバ30は、置換情報により指定されたエンコード方式をサポートしていないときも、上述のURLエンコード処理を実行しない。
図18は、URLエンコード処理が実行されなかったときにWebサーバ30から送信されるリプライの実施例を示す。この場合、リプライヘッダにX-url-decodetypeフィールドは追加されていない。また、HTML文書中でリンク先を表すURLは、中継サーバ10を経由するための情報を含んでいない。
<リプライの送信>
中継サーバ10は、Webサーバ30から図17または図18に示すリプライを受信する。そうすると、中継サーバ10は、必要に応じてリプライ中のWebページを加工した後、そのリプライをクライアント1へ送信する。
図19は、Webサーバ30からリプライを受信した中継サーバ10の処理を示すフローチャートである。中継サーバ10は、応答受付部16がWebサーバ30からリプライを受信したときに、このフローチャートの処理を実行する。
ステップS41〜S42において、応答解釈部17は、Webサーバ30から受信したリプライのリプライヘッダからContent-Typeフィールドの値を取得する。そして、応答解釈部17は、Content-Typeフィールドの値が、URL置換処理を必要とするタイプを表しているか否かをチェックする。Content-Typeフィールドの値がURL置換処理を必要とするタイプを表していれば、処理はステップS43へ移行し、そうでない場合は、処理はステップS48へ移行する。
この実施例では、WebページがHTML形式であれば、URL置換処理が必要であると判定される。例えば、図17または図18に示すリプライにおいては、Content-Typeフィールドに「html」が設定されている。したがって、この場合、応答解釈部17は、ステップS43〜S47を実行する。
ステップS43において、応答解釈部17は、リプライヘッダからX-url-decodetypeフィールドの値を取得する。また、ステップS44において、応答解釈部17は、取得したX-url-decodetypeフィールドの値が、中継サーバ10が実行するURLエンコード方式を表す文字列と一致するか否かをチェックする。この例では、中継サーバ10が実行するURLエンコード方式は、下記の文字列で表わされる。
hyphen-concatinate-hostname
そして、X-url-decodetypeフィールドの値が、中継サーバ10が実行するURLエンコード方式を表す文字列と一致するときは、処理はステップS45へ移行する。これに対して、リクエストヘッダがX-url-decodetypeフィールドを有していない場合、X-url-decodetypeフィールドに値が設定されていない場合、X-url-decodetypeフィールドの値が、中継サーバ10が実行するURLエンコード方式を表す文字列と一致していない場合は、応答解釈部17は、リプライをURL書換え部18へ送信する。そして、処理はステップS46へ移行する。
例えば、図17に示すリプライは、X-url-decodetypeフィールドを有しており、その値はhyphen-concatinate-hostnameである。よって、中継サーバ10が図17に示すリプライを受信すると、応答解釈部17は、Webサーバ30においてURL処理が実行されたと解釈し、ステップS44で「Yes」と判定する。一方、図18に示すリプライは、X-url-decodetypeフィールドを有していない。したがって、中継サーバ10が図18に示すリプライを受信すると、応答解釈部17は、Webサーバ30においてURL処理が実行されていないと解釈し、ステップS44で「No」と判定する。
ステップS45において、応答解釈部17は、リプライヘッダからX-url-decodetypeフィールドを削除する。そして、応答解釈部17は、X-url-decodetypeフィールドが削除されたリプライを応答変換部19へ送信する。
一方、ステップS46においては、URL書換え部18は、リプライのHTML文書中のリンク先を表すURLを書き換える。このとき、URL書換え部18は、Webサーバ30のURLエンコード部37によるエンコード処理と実質的に同等の書換え処理を実行する。例えば、中継サーバ10が図18に示すリプライを受信したときは、URL書換え部18は、「前ページ」にアクセスするためのURLを下記のように書き換える。
http://http-example-com.proxy.com/app1/page2/html
また、URL書換え部18は、「次ページ」を表すURLについても同様に書き換える。
ステップS47において、応答変換部19は、リプライを変更する必要があると応答解釈部17により判定されたときは、セッション管理部12を参照し、クライアント1のユーザが要求するサービスを識別する。そして、応答変換部19は、クライアント1のユーザが要求するサービスに応じてリプライを加工する。例えば、ユーザが翻訳サービスを要求しているときは、応答変換部19は、リプライ中のテキストを翻訳する。あるいは、応答変換部19は、ユーザが要求する機能を実現するためのスクリプトをリプライに挿入する。
ステップS48において、応答転送部20は、ステップS41〜S47により得られるリプライをクライアント1のWebブラウザへ送信する。ここで、リプライのHTML文書中にリンク先を表すURLが記述されているときは、そのURLは、Webサーバ30において書き換えられている。また、Webサーバ30においてURLエンコード処理が実行されなかったときは、そのURLは、中継サーバ10のURL書換え部18により書き換えられる。すなわち、中継サーバ10からクライアント1へ送信されるリプライのHTML文書中のURLは、Webサーバ30または中継サーバ10により、リンク先へのアクセスが中継サーバ10を経由して行われるように書き換えられている。中継サーバ10からクライアント1へ送信されるリプライの実施例を図20に示す。
クライアント1は、図20に示すリプライを受信すると、Webブラウザを利用してそのリプライの内容(すなわち、HTML文書等で記述されるWebページ)を表示する。このとき、このリプライには、中継サーバ10が提供するサービスが付加されている。
このような状況において、クライアント1のユーザが、Webブラウザを利用して、例えば、図20に示す「前ページ」を指定(クリック)するものとする。この場合、Webブラウザは、図20に示すリプライから得られる下記のURLへ新たなリクエストを送信する。
http://http-example-com.proxy.com/app1/page2/html
このURLの「http-example-com.proxy.com」という記述は、少なくともクライアント1のWebブラウザと中継サーバ10との間では、「HTTPでproxy.comを経由してexample.comにアクセスする」を表す。
したがって、「前ページ」を閲覧するためのリクエストは、クライアント1から中継サーバ10を経由して目的サーバ(ここでは、Webサーバ30)へ送信される。Webサーバ30は、中継サーバ10から上記リクエストを受信すると、そのリクエストに対応するリプライ(この例では、「前ページ」に相当するWebページ)を生成して中継サーバ10へ返送する。そして、中継サーバ10は、Webサーバ30から受信したリプライをクライアント1へ転送する。すなわち、「前ページ」に相当するWebページは、中継サーバ10を経由してクライアント1に提供される。したがって、クライアント1は、「前ページ」に相当するWebページについても、中継サーバ10が提供するサービスを受けることができる。
<他の実施形態>
他の実施形態のWebアプリケーション提供方法において、中継サーバ10がリクエストに置換情報を追加する手順、およびWebサーバ30が置換情報を含むリクエストに基づいてリプライを生成する手順については、図6〜図18を参照しながら説明した方法と同じである。ただし、他の実施形態の方法は、リプライを受信した中継サーバ10の処理が図19に示す手順と異なっている。したがって、以下では、他の実施形態においてリプライを受信した中継サーバ10の処理を説明する。
図21は、他の実施形態においてリプライを受信した中継サーバ10の処理を示すフローチャートである。ここで、図21に示すステップS41〜S44、S45、S47、S48の処理は、図19を参照しながら説明した通りである。すなわち、他の実施形態においても、リプライヘッダのX-url-decodetypeフィールドの値が、中継サーバ10のURLエンコード方式を表す文字列と一致するときは、応答解釈部17は、リプライヘッダからX-url-decodetypeフィールドを削除する。このとき、中継サーバ10は、必要応じて、リプライに対してユーザが要求するサービスを付加する。
ところが、他の実施形態においては、リクエストヘッダがX-url-decodetypeフィールドを有していない場合、X-url-decodetypeフィールドに値が設定されていない場合、或いはX-url-decodetypeフィールドの値が中継サーバ10のURLエンコード方式を表す文字列と一致していない場合は、応答解釈部17は、リプライを応答転送部20へ送信する。すなわち、Webサーバ30においてURLエンコード処理が実行されなかったときは、中継サーバ10は、URL書換え部18によるURL書換え処理、および応答変換部19によるWebページの変更を行うことなく、Webサーバ30により生成されたリプライをクライアント1へ送信する。
この場合、クライアント1が受信するWebページには、中継サーバ10が提供するサービスは付加されていない。また、クライアント1がWebブラウザを利用してWebページ内のURLにアクセスすると、リクエストは、中継サーバ10を経由せずにアクセス先へ転送される。したがって、そのアクセス先から送信されるWebページにも、中継サーバ10が提供するサービスは付加されない。
このように、Webサーバ30においてWebページ中のURLが書き換えられているときは、中継サーバ10は、リプライの内容の変更を許可する。一方、Webサーバ30においてWebページ中のURLが書き換えられてないときは、中継サーバ10は、リプライの内容の変更を禁止する。
この構成により、Webサーバ30は、あるリンク先へのアクセスが中継サーバ10を経由しないように制限することができる。すなわち、Webサーバ30がWebページ内のURLを書き換えなければ、クライアント1が受信するWebページ内のURLは、目的サーバを指し示す状態を維持している。この場合、クライアント1のWebブラウザがそのURLを指定すると、リクエストは、中継サーバ10を経由することなく目的サーバへ転送される。そして、目的サーバからクライアント1へ提供されるリプライも、中継サーバ10を経由しない。したがって、目的サーバからクライアント1へ提供されるリプライは、中継サーバ10によって加工または変更されることはない。すなわち、Webサーバ30は、中継サーバ10により加工または変更されたくないコンテンツを保護できる。
一方、中継サーバ10は、リプライデータに完了報告情報(X-url-decodetypeフィールド)が付与されていないときは、URL書換え部18によるURL書換え処理、および応答変換部19によるWebページの変更を行わない。よって、Webサーバ30は、完了報告情報を、中継サーバ10におけるURLの書換えの可否およびWebページの加工の可否を表す情報として使用することもできる。
<中継サーバ10およびWebサーバ30のハードウェア構成>
図22は、中継サーバ10およびWebサーバ30を実現するためのコンピュータシステム100のハードウェア構成を示す図である。コンピュータシステム100は、図22に示すように、CPU101、メモリ102、記憶装置103、読み取り装置104、通信インタフェース106、入出力装置107を備える。CPU101、メモリ102、記憶装置103、読み取り装置104、通信インタフェース106、入出力装置107は、例えば、バス108を介して互いに接続されている。
CPU101は、メモリ102を利用して上述のフローチャートの手順を記述したプログラムを実行することにより、実施形態の中継サーバ10またはWebサーバ30の機能を提供する。コンピュータシステム100が中継サーバ10として動作するときは、CPU101は、図7および図19(他の実施形態においては、図19に代わりに図21)に示すフローチャートの手順を記述したプログラムを実行し、図4に示す要素11〜20の機能の一部または全部を提供する。また、コンピュータシステム100がWebサーバ30として動作するときは、CPU101は、図9、図12、図14に示すフローチャートの手順を記述したプログラムを実行し、図5に示す要素31〜33、35〜38の機能の一部または全部を提供する。
メモリ102は、例えば半導体メモリであり、RAM領域およびROM領域を含んで構成される。記憶装置103は、例えばハードディスクであり、実施形態の手順を記述したプログラムを格納する。記憶装置103は、フラッシュメモリ等の半導体メモリであってもよい。また、記憶装置103は、外部記録装置であってもよい。なお、コンピュータシステム100が中継サーバ10として動作するときは、ユーザ情報DB21は、例えば、記憶装置103に設けられる。また、コンピュータシステム100がWebサーバ30として動作するときは、ページ記述情報格納部34は、例えば、記憶装置103に設けられる。
読み取り装置104は、CPU101の指示に従って可搬型記録媒体105にアクセスする。可搬型記録媒体105は、例えば、半導体デバイス(USBメモリ等)、磁気的作用により情報が入出力される媒体、光学的作用により情報が入出力される媒体(CD−ROM、DVD等)などにより実現される。通信インタフェース106は、CPU101の指示に従ってネットワークを介してデータを送受信する。入出力装置107は、例えば、ユーザからの指示を受け付けるデバイス、CPU101の処理結果を表示するデバイス等に相当する。
中継サーバ10またはWebサーバ30の処理に係わるプログラムは、例えば、下記の形態でコンピュータシステム100に提供される。
(1)記憶装置103に予めインストールされている。
(2)可搬型記録媒体105により提供される。
(3)プログラムサーバ110からダウンロードする。
1 クライアント
10 中継サーバ
11 要求受付部
12 セッション管理部
13 サブドメイン解釈部
14 置換情報追加部
15 要求転送部
16 応答受付部
17 応答解釈部
18 URL書換え部
19 応答変換部
20 応答転送部
21 ユーザ情報データベース
30 Webサーバ(目的サーバ)
31 要求受付部
32 置換情報抽出部
33 ページ生成部
34 ページ記述情報格納部
35 アプリケーション処理部
36 タグ処理部
37 URLエンコード部
38 応答送信部

Claims (10)

  1. Webサーバから中継サーバを介してクライアントへWebアプリケーションを提供する方法であって、
    前記中継サーバは、前記クライアントから受信するリクエストに、前記Webサーバが提供するWebページ中に設定されているURLへのアクセスが前記中継サーバを経由するように、前記URLを書き換えるための置換情報を追加し、
    前記中継サーバは、前記置換情報を含むリクエストを前記Webサーバへ送信し、
    前記Webサーバは、前記リクエストに従って応答Webページを生成し、
    前記Webサーバは、前記応答Webページ中に設定されるURLを前記置換情報に基づいて書き換え、
    前記Webサーバは、前記置換情報に基づいて書き換えられたURLを含む前記応答Webページを前記中継サーバへ送信し、
    前記中継サーバは、前記応答Webページを前記クライアントへ送信する
    ことを特徴とするWebアプリケーション提供方法。
  2. 請求項1に記載のWebアプリケーション提供方法であって、
    前記置換情報は、予め決められたパターンの文字列を含み、
    前記Webサーバは、前記文字列の一部を前記応答Webページのプロトコル名、ホスト名、パス名の中の少なくとも1つを表す文字列に置換することにより、前記URLを書き換える
    ことを特徴とするWebアプリケーション提供方法。
  3. クライアントとWebサーバとの間に配置される中継サーバに、
    前記クライアントから受信するリクエストに、前記Webサーバが提供するWebページ中に設定されるURLへのアクセスが前記中継サーバを経由するように、前記URLを書き換えるための置換情報を追加し、
    前記置換情報を含むリクエストを前記Webサーバへ送信し、
    前記Webサーバにおいて前記リクエストに応じて生成されたWebページを含むリプライを前記Webサーバから受信し、
    前記リプライを前記クライアントへ送信する
    処理を実行させるプログラム。
  4. 前記中継サーバに、
    前記Webサーバにおいて前記置換情報に基づいて前記Webページ中のURLが書き換えられたか否かを判定し、
    前記Webサーバにおいて前記Webページ中のURLが書き換えられてないときは、前記Webページ中のURLへのアクセスが前記中継サーバを経由するように、前記Webページ中のURLを書き換える、
    処理をさらに実行させる請求項3に記載のプログラム。
  5. 前記中継サーバに、
    前記Webサーバにおいて前記置換情報に基づいて前記Webページ中のURLが書き換えられたか否かを判定し、
    前記Webサーバにおいて前記Webページ中のURLが書き換えられているときは、前記リプライの内容の変更を許可し、前記Webサーバにおいて前記Webページ中のURLが書き換えられてないときは、前記リプライの内容の変更を禁止する
    処理をさらに実行させる請求項3に記載のプログラム。
  6. 前記中継サーバに、
    前記リプライの内容を変更する処理をさらに実行させる請求項3に記載のプログラム。
  7. Webサーバに、
    クライアントから送信され、中継サーバにおいて置換情報が追加されたリクエストを受信し、
    前記リクエストに従ってWebページを生成し、
    前記Webページ中に設定されるURLを、前記置換情報に基づいて、前記URLへのアクセスが前記中継サーバを経由するように書き換え、
    前記置換情報に基づいて書き換えられたURLを含む前記Webページを前記中継サーバへ送信する
    処理を実行させるプログラム。
  8. 前記Webサーバに、
    前記URLが前記置換情報に基づいて書き換えられたときは、前記URLが書き換えられたことを表す完了報告情報を前記リプライに追加する処理をさらに実行させる
    ことを特徴とする請求項7に記載のプログラム。
  9. クライアントとWebサーバとの間に配置される中継サーバ装置であって、
    前記クライアントから受信するリクエストに、前記Webサーバが提供するWebページ中に設定されるURLへのアクセスが前記中継サーバを経由するように、前記URLを書き換えるための置換情報を追加する追加部と、
    前記置換情報を含むリクエストを前記Webサーバへ送信する要求転送部と、
    前記Webサーバにおいて前記リクエストに応じて生成されたWebページを含むリプライを前記Webサーバから受信する応答受付部と、
    前記リプライを前記クライアントへ送信する応答転送部、
    を有する中継サーバ装置。
  10. クライアントから送信され、中継サーバにおいて置換情報が追加されたリクエストを受信する要求受付部と、
    前記リクエストに従ってWebページを生成するページ生成部と、
    前記Webページ中に設定されるURLを、前記置換情報に基づいて、前記URLへのアクセスが前記中継サーバを経由するように書き換える書換え部と、
    前記書換え部により書き換えられたURLを含む前記Webページを前記中継サーバへ送信する応答送信部、
    を有するWebサーバ装置。
JP2010213274A 2010-09-24 2010-09-24 Webアプリケーション提供方法、中継サーバ装置、Webサーバ装置 Expired - Fee Related JP5500020B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2010213274A JP5500020B2 (ja) 2010-09-24 2010-09-24 Webアプリケーション提供方法、中継サーバ装置、Webサーバ装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010213274A JP5500020B2 (ja) 2010-09-24 2010-09-24 Webアプリケーション提供方法、中継サーバ装置、Webサーバ装置

Publications (2)

Publication Number Publication Date
JP2012068902A JP2012068902A (ja) 2012-04-05
JP5500020B2 true JP5500020B2 (ja) 2014-05-21

Family

ID=46166106

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010213274A Expired - Fee Related JP5500020B2 (ja) 2010-09-24 2010-09-24 Webアプリケーション提供方法、中継サーバ装置、Webサーバ装置

Country Status (1)

Country Link
JP (1) JP5500020B2 (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2002189973A (ja) * 2000-12-20 2002-07-05 Nec Corp 認証・課金代行方法、認証・課金代行システム及び認証・課金代行プログラムを記憶した記憶媒体
JP2003141018A (ja) * 2001-11-02 2003-05-16 Fujitsu Ltd サーバ、中継装置、情報提供方法、およびプログラム
JP4179535B2 (ja) * 2002-09-03 2008-11-12 インターナショナル・ビジネス・マシーンズ・コーポレーション ネットワークシステム、リバースプロキシ、コンピュータ装置、データ処理方法及びプログラム
JP5049172B2 (ja) * 2008-03-17 2012-10-17 大阪瓦斯株式会社 リバースプロキシシステム
JP4748819B2 (ja) * 2009-01-28 2011-08-17 インターナショナル・ビジネス・マシーンズ・コーポレーション クライアントプログラム、端末、方法、サーバシステムおよびサーバプログラム

Also Published As

Publication number Publication date
JP2012068902A (ja) 2012-04-05

Similar Documents

Publication Publication Date Title
JP4398462B2 (ja) ウェブ・デバイスにおけるhtmlページの提示を改善するための方法およびシステム
US7062547B2 (en) Method and system for providing a central repository for client-specific accessibility
EP1320972B1 (en) Network server
JP5575511B2 (ja) ウェブサイト閲覧システム、サーバ及びクライアント端末
JP4340566B2 (ja) Webページ生成装置、組み込み装置、Webページ生成の制御方法、Webページ生成プログラム及び記録媒体
CN103246489B (zh) 打印系统、打印服务器和控制方法
US20130262696A1 (en) Proxy server apparatus, client terminal apparatus, remote access system, transfer control method, access method, and recording medium
JP5595032B2 (ja) 情報処理システム、その制御方法、情報処理装置、情報提供装置、画像処理装置およびプログラム
CN101335766A (zh) 通信系统、代理服务器、控制代理服务器的方法及其控制程序
JP2005327154A (ja) Htmlファイル処理方法及びプログラム
JP2004303218A (ja) 情報提供装置及び情報表示装置
JP5499524B2 (ja) 中継プログラムおよび中継装置
JPWO2007052353A1 (ja) データ伝送システムおよびその方法
JP5146088B2 (ja) ウェブ情報中継方法及び装置
JP2007280028A (ja) 情報処理装置及びショートカットキーの設定・変更方法
US8407583B2 (en) Information processing apparatus, information processing method, computer-readable medium and computer data signal
JP2005122493A (ja) サーバ装置、情報の提供方法、及びプログラム
JP2009123062A (ja) コンテンツ表示制御システム及び方法
US7340521B1 (en) Method for routing a request over a network to a content source that can most advantageous serve the request
JP5500020B2 (ja) Webアプリケーション提供方法、中継サーバ装置、Webサーバ装置
JP4799581B2 (ja) ページカスタマイズサーバ、ページカスタマイズプログラムおよびページカスタマイズ方法
KR101724076B1 (ko) 사용자 서버를 이용한 html 제어 시스템 및 방법
JP5243452B2 (ja) ブラウザプログラム及び端末装置
JP4903078B2 (ja) 電子装置、Webページ生成方法、及びWebページ生成プログラム
Břoušek Evaluation and usage of Google Progressive Web Apps technology

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130702

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140206

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140212

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140225

R150 Certificate of patent or registration of utility model

Ref document number: 5500020

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees