アーキテクチャは3種類

 まずは,情報システムの基本アーキテクチャを簡単におさらいしたい。主な基本アーキテクチャには,ホスト・システム,クライアント/サーバー(C/S)システム,Webシステム――の3種類がある。

 ホスト・システムは,「ホスト」と呼ばれる大型コンピュータで集中処理する。ホストに接続した「端末」はあるが,画面表示と通信を担当するだけで,業務処理は実行しない。ホスト・システムは,情報システムの黎明期から実績を積み重ねているので,システム全体の堅牢性が高く,今日でも多用されている。

 これに対してC/Sシステムとは,「クライアント」と「サーバー」(一般的にはデータベース・サーバー)という二つの要素で構成し,それぞれで業務を分散処理する。サーバーの負荷が軽くなるので,ホストに比べてハードウエアは小型・安価・低スペックで済む。オープン系(UNIXやPC)システムで多用されてきたが,構築や改修のたびにクライアント・マシンにアプリケーションを配布する手間がかかった。

 この「アプリケーション配布問題」を解決する選択肢として注目されたのが,Webシステムである。Webシステムは,WebクライアントとWebサーバーが「HTTP(HyperText Transfer Protocol)」と呼ぶルール(プロトコル)に従って通信する一種のC/Sシステムである(図1)。ソフトウエア上の観点で言えば,クライアント・ソフトは「Internet Explorer」のようにHTTPで通信する機能を持つWebブラウザであり,サーバー・ソフトは「IIS(Internet Information Services)」や「Apache」のようなHTTP待ち受け機能を持つ常駐ソフト(これを「HTTPデーモン=HTTPD」と呼ぶ)である。

図1●Webシステムの構成要素
図1●Webシステムの構成要素
静的な(表示内容が変化しない)HTMLファイルを提供する場合は,Webクライアント上にWebブラウザ,Webサーバー上にHTTPD(HTTPデーモン)を置いてネットワークで通信できるようにすれば,Webシステムは完成する。動的な(表示内容が変化する)HTMLファイルを提供する場合には,AP(アプリケーション)サーバーやDB(データベース)サーバーを併用することが多い

 WebシステムはC/Sシステムの一種だが,業務処理の大半はサーバー側で実行する。なぜならWebブラウザには,Webページ記述用タグ言語「HTML(HyperText Markup Language)」の指定に従い画面を表示したり,スクリプト言語「JavaScript」の記述に従い簡単な処理をしたりする機能しかないからである。

 HTMLやJavaScriptのデータは,WebブラウザがHTTPDからその都度入手する。そのため,HTTPDから送り出すHTMLやJavaScriptの内容を書き換えるだけで,自動的にWebブラウザ上の表示内容や動作が変わる。これが,Webシステムではアプリケーションの配布を意識する必要が無い理由である。

シンプルなHTTP

 3種類のアーキテクチャのうち,最近の主流は「Webシステム」である。そのWebシステムで使われる通信ルール(=通信プロトコル)が「HTTP」だ。

上りと下りで成り立つテキスト・プロトコル

 HTTPはTCP/IP上で利用できるプロトコルの一つ(HTTPの仕様はRFC1945/RFC2616で規定している)である。ほかのプロトコルと区別するために,TCPポート80番という窓口でやり取りする。HTTP自体はテキスト・ベースのシンプルなプロトコルだ。

 具体的な処理の流れは,次のようになる。Webブラウザは,WebサーバーのTCPポート80番に接続し,コンテンツ提供などを依頼(リクエスト)する。するとWebサーバーは,該当するコンテンツを探し,応答(レスポンス)として返す。これだけである。つまりHTTPは,上りとなるリクエストと,下りとなるレスポンスが,必ず一対となる。

 この処理の流れを,実際に確認してみよう(図2)。手元のコンピュータにHTTPD(IISやApacheなど)を導入し,Windowsの場合はコマンド・プロンプトから「telnet」と入力する。プロンプトが表示されたら「open localhost 80 (エンター・キー)」と入力する。これは,コンピュータ自身(localhost)のTCPポート80番を開く指示である。ほかのコンピュータにHTTPDを導入した場合は,localhostの代わりにそのコンピュータのホスト名を入力してほしい。

図2●テキスト・ベースの「HTTP」でメッセージをやり取りする
図2●テキスト・ベースの「HTTP」でメッセージをやり取りする
Webブラウザは「HTTP(HyperText Transfer Protocol)」というプロトコルでHTTPDと通信する。Webブラウザの代わりにtelnetを使い,その様子をエミュレートできる。図示したのは,HTTPDが動作するWebサーバー自身(localhost)に接続した様子

 無事にWebサーバーとの接続に成功すると画面が暗転する。そうしたら,次のように実行する。

  GET / HTTP/1.0 (エンター・キー2回)

 意味については後述するが,これがリクエスト・メッセージの一例である。即座に「HTTP/1.1 200 OK」で始まる文字列が表示されたはずだ。今表示された文字列が,Webサーバーから返ってきたレスポンス・メッセージである。

先頭行で命令や処理状態を伝える

 一般的なWebシステムでのやり取りを目で見られるようにするには,HTTP通信の中継機能を持ち,リクエスト/レスポンスのログを出力できる「プロキシ」を利用する。

 プロキシを導入し,WebブラウザのURLバーに例えば「http://www.google.co.jp/」と入力すると,Webサーバーに対して「GET http://www.google.co.jp/ HTTP/1.0」で始まるリクエスト・メッセージが送付されることを確認できる(図3)。

図3●通信内容は複雑に見えるが,実際には単純
図3●通信内容は複雑に見えるが,実際には単純
WebブラウザとHTTPDが実際に送受信している通信内容は一見複雑そうだが,決まったルールでメッセージやデータをやり取りしているだけである
[画像のクリックで拡大表示]

 リクエスト・メッセージの先頭には,処理内容を示す命令(この場合は「GET」)が記されている。これらの命令を「メソッド」と呼ぶ。Webブラウザが利用するメソッドは,主にGETとPOSTである。GETメソッドはHTTPDからコンテンツを取得する場合に,POSTメソッドはフォーム経由でHTTPDにデータを送付する場合に,それぞれ多用する。メソッド名の直後には,処理対象となるURLを指定する。

 2行目から続く「Accept:…」や「User-Agent:…」などは「ヘッダー」である。これらヘッダーには,クライアントで受け入れられるコンテンツの種類(Accept)や,Webブラウザの種類(User-Agent)などを指定する。例えば,User-Agentヘッダーをサーバー側のアプリケーションで判別すれば,携帯電話機からのリクエストを見分けて携帯電話用のコンテンツを送り返すといった制御が可能になる。

 GETメソッドには存在しないが,POSTメソッドでは,ヘッダー部の直後に空行(リターン・コードだけの行)をはさんで,「ボディ」と呼ぶデータ部が続く。ボディには,Webサーバーに送信するデータが含まれる。例えば,フォームに入力した値や,添付したファイルの内容などを格納する。

 一方のレスポンス・メッセージは,「HTTP/1.0 200 OK」などの行で始まる。「200 OK」という部分は,リクエストした処理の状態コードと説明である。「200 OK」は,要求したコンテンツを無事に取得できたことを示している。

 2行目以降には,リクエスト・メッセージと同じように,ヘッダー,空行,ボディが続く。レスポンス・メッセージ中のヘッダーには,コンテンツの種類(Content-Type)やキャッシュ可否(Cache-Control)などが指定されている。これらのヘッダー情報は,主にWebブラウザが活用する。

 例えばHTTP/1.1でキャッシュを許可するCache-Control: publicヘッダーがあれば,取得したコンテンツは有効期限が来るまでWebブラウザやキャッシュ・サーバーが蓄積する。ホスト上にしかデータを蓄積しないホスト・システムと比べると,情報漏洩のリスクを抱えたポイントが多くなる場合がある。また,これまで見てきたHTTPの振る舞いから分かるように,WebブラウザはHTTPDにリクエストしないと,原則として画面を表示できない。C/Sシステムと違って,オフライン環境では事実上使えないことになる。

高安 厚思(たかやす あつし) オープンストリーム テクニカルコンピテンシーユニット 主管システムズアーキテクト
銀行系シンクタンクでオブジェクト指向技術の研究に携わった後,大手SI業者でアーキテクチャ構築やプロセス研究を担当。現職ではSOA(Service Oriented Architecture)を中心とする研究開発とアーキテクチャ構築に従事している