学会誌にはのせられなかった部分

「学会誌のスリム化が叫ばれている」現状の中, 残念だったのですが,かなり 削らなくてはいけなかった文章がありました. ここにそれらの文書をのせます. ちょっとばらばらな感じですが, お許し下さい.

MIME Header

HTTP/1.0 になって導入された MIME Header はいろいろな面で WWW の可能性を広げた.

特に MIME Header の Content-type フィールドの導入によって, filename と filetype の分離ができるようになった. この Content-type フィールドは filetype の決定権を クライアント側からサーバ側に移した. このことにより「URL の抽象化」の自由度がかなり増した. 例えば後述する 回転印の画像を動的に生成する CGI コマンドの例では, クライアントにデータを GIF 形式の画像データファイルであると 思わせるためには, HTTP/0.9 では

GET /cgi-bin/seal.gif
などとして, アクセスするための URL の最後に GIF ファイルであることを示す 拡張子がついている必要があった. しかし, HTTP/1.0 では
GET /cgi-bin/seal HTTP/1.0 
とアクセスしてきても, MIME Header の中で
...
Content-type: image/gif
...

[gif のデータ]
と返すことにより, クライアントはサーバが返すデータを GIF 形式と解釈して適切なビューアにそのデータを渡して 表示してくれる.

また MIME Header により Security の仕組みも容易に 導入できるようになった. MIME Header の中に鍵などを埋め込み, データ自身 (あるいはもともとの MIME Header なども含めたもの) を 暗号化することにより, Security を確保した アクセスが可能になる. SHTTP (Secure HTTP) は基本的にこの線でいくようである (0).

URL Redirection

この URL Redirection を使って負荷分散することもできる. いくつかの WWW サーバで同じデータを共有し, そのデータにあるハイパーテキスト中のリンクを 全て相対的に書いておく. 最初にアクセスされるサーバは, ``Location'' フィールドで アクセスしてきたユーザを別のサーバに飛ばしてしまう. 後のアクセスは, リンクが全て相対的に書いてあるので その飛んでいった先のサーバに対して起こる. 関西大震災の後に, 地震の情報を置いた NTT の WWW サーバに アクセスが集中した際にこの方法が使われたそうである. (1)

アクセスする度に変わる情報
(回転印と時刻表)

次の例は, 回転印と時刻表である. URL が同じでもいつも同じものを返す必要 はない. むしろ毎日あるいは毎時間変わるようなものの方が興味深い. 富士通では文書の承認に名前の入った回転印を使う. 日付の部分を回転して, 日付を変えることができるので そういう名前がついている. そこで WWW のページにこのような印を入れたら面白かろうと 入れてみたものが である.
GET /cgi-bin/seal HTTP/1.0
と WWW のサーバにアクセスすると, 回転印の画像が 動的に生成される. この回転印の画像の中の日付の部分が毎日変わる. その当時, 現在時刻の時計の絵を生成するツールがあったので, それをいろいろ変更して図のような回転印の画像を生成する ものを作った. 折角作るならきれいに作ろうといろいろ工夫しており, この回転印の動的画像生成は以下のようになされる. まず回転印の画像をスキャンしたものと, 当日の日付から 当日の日付が入った PostScript のデータを作る. (2) その PostScript のデータから, フリーソフトである ghostscript で PPM (Portable PixMap) ファイルを作り, やはりフリーソフトの netpbm を 使って少し小さくすることにより anti-aliasing (3) をかけ, さらに背景色を透明と指定した GIF 形式の 画像データに変換している.

時刻表であれば, ただ単に時刻表を出すだけではなく, 現在時刻とその時間を表すアナログの時計のイメージを示し, 現在の時刻の近辺の時刻表を出力する. さらにその時刻表の中で乗ることのできる 電車の時間を強調して出し, その電車までの時間を表示するように した. 例えば WWW のクライアントから WWW サーバに

GET /cgi-bin/tt-www?Nakahara-T+5
のようなアクセスがあると, 武蔵中原駅 (4) の立川方面の時刻表で 現在時刻から 5 分後に駅につくとした場合の時刻表と 乗ることのできる電車の時刻を提示してくれる.

ページを書き換えてしまう (SJIS Gateway)

次の例は Shift JIS Gateway である. 後から出てきた Proxy と基本的に似たアイデアである. Proxy が出てくるまで Shift JIS しか表示できない PC や Macintosh 上の WWW クライアントなどのアクセスのために使っていた. この方法ではページ中の URL を書き換え, WWW クライアントに強制的に全てのアクセスを特定のサーバを 通じて行なわせるようにしていた.

以下の説明ではゲートウェイマシンの名前を ``gateway'' とする. ``gateway'' 自身も WWW サーバである. さて最初の一度だけは以下のような URL で WWW クライアントから アクセスする.

http://gateway/cgi-bin/sjis/http://www.fujitsu.co.jp/
すわなち, メソッドは HTTP でマシンは ``gateway'' にアクセスするのだが, 通常の URL の ``path'' に当たる部分にさらに ``cgi-bin/sjis/'' + URL を指定するのである. ``gateway'' には
GET /cgi-bin/sjis/http://www.fujitsu.co.jp/
というアクセスが来る. ``gateway'' は ``sjis'' という CGI コマンドを実行することにより, この URL ( http://www.fujitsu.co.jp/) に対応する文書をとってくる. そしてまずこの文書のコードを Shift JIS に変換する. 次にこの文書内をパースして, ``リンク'' になっている URL を探す. 例えば現在このページには 次のような ``リンク'' がある.
<A HREF=hypertext/About_fujitsu/>
<iMG ALIGN=DOWN ALT="o" 
	SRC=images/icon_1b1.gif>
富士通紹介</A>
この ``リンク'' を
<A HREF=http://gateway/cgi-bin/sjis/http://www.fujitsu.co.jp/hypertext/About_fujitsu/>
<iMG ALIGN=DOWN ALT="o" 
	SRC=http://www.fujitsu.co.jp/images/icon_1b1.gif>
富士通紹介</A>
と書き換える (5). その他のリンクも同様に書き換えた文書をユーザに返す. ユーザは画面上では 図-1 と同じように見える (6). ユーザがそれ以降文書の中のどのリンクをクリックしても, ``gateway'' を 通じてアクセスすることになる. 戻ってくる文書も再び Shift JIS になって, ``リンク'' が書き換えられている (7).

Proxy Server とは違い, サーバ側にどのマシンをゲートウェイとして アクセスするのかの決定権があるので以下のようなことができる. 同じようなゲートウェイマシンをいくつか用意して, 上の ``リンク'' の書き換えで URL のゲートウェイマシンの名前の 部分を, 例えばそれらのマシンの名前からランダムに選ぶことにより, 負荷分散も可能になる.

このアイデアを使って, Proxy と同様に社内から社外の WWW サーバを 見せることも考えていたが, 結局 SOCKS (8) が出てきたので使わなかった.

Proxy

Proxy Server (代理サーバ) は, クライアントと本来のサーバの間に入って, サービスアクセス要求の仲介を行うソフトウェアである. 代理サーバを介した典型的なアクセスの様子は のようになる. クライアントは全てのアクセス要求を, URL によって示される実際のサーバではなく, もよりの代理サーバへ送る. 代理サーバは, クライアントからの要求を受けると URL に従って 目的のサーバにアクセスする. 結果は代理サーバによってクライアントに送り返される. 代理サーバと目的のサーバの通信は各サーバに固有のさまざまなプロトコル (HTTP, FTP, Gopher など) で行う. 一方, クライアントと代理サーバの間の通信は全て HTTP で行う.

代理サーバは, URL キャッシュという手法でによって Internet の負荷を減らすことができる. あるクライアントからの要求で URL をアクセスしたとき, その URL とそれに対する応答を記録しておく. 再び同じ URL が別クライアントから要求されたときには, 代理サーバ内の記録に基づいて応答し, 本来のサーバからの情報の取り出しを省略する. 毎回 Internet を介して遠隔地へアクセスしなくてすむため, 通信量が減る. また, クライアントから見たレスポンスも向上する.

代理サーバ技術には他の用途もある. 例えば企業内のローカルなネットワークから Internet にアクセスする場合, 逆方向の進入を防ぐために FireWall などと呼ぶ技術を用いることが多い. 代理サーバを社内ネットワークと Internet との境界に設置することで, FireWall による保護をより効果的なものにすることができる.

脚注

(0)
SHTTP については「将来と課題」の章も参照せよ.
(1)
その他の負荷分散の方法としては, NCSA の WWW サーバなどで使わ れている round robin DNS という方法もある. この方法では IP アドレスを 聞かれた DNS サーバがいくつかのマシンの IP アドレスを順に返すことに より, アクセスを分散する.
(2)
ここで円など全てを PostScript のコマンドで書かずに スキャンデータにしたのは, 全て PostScript のコマンドにすると あまりに完全な円になってしまい, リアリティが出ないからである.
(3)
境界のギザギザを目立たなくするために, 境界上の ピクセルをそのピクセルに接する両側のピクセルの色の中間的な 色に置き換えることを anti-aliasing という.
(4)
著者らが働く富士通の川崎工場は南武線の 武蔵中原駅にある.
(5)
イメージの方は日本語のコードには関係ないので 直接アクセスしてもらうようにする.
(6)
実は一箇所だけ ``資料の URL'' の部分が異なってしまう.
(7)
実際には, MIME Header の部分はそのまま通すなどの 細かいこともしている.
(8)
SOCKS は NEC Princeton 研究所から提供された フリーソフトである. FireWall の Security を保ったまま 各種クライアントから FireWall の外のサーバとやりとりすること を可能にするソフトである.