「ソケットって,プログラムからすると無手順でデータを送ってると考えていいんですよね」
「うん」
「でも,通信ってよくデータが化けるって言うじゃないですか。どうやって正しいデータを送るんですか」
「どうやってと言ってもなあ。そんなに化けないよ。インターネットなら下の方ではTCP/IPがちゃんと送ってくれるし,アプリケーション・レベルのプロトコルが正しければ大丈夫だよ」
「本当ですかぁ」

 インターネットを利用するプログラムなど,多くのプログラムが利用するTCP/IP。TCP/IPを利用した通信をする際の,出入口となるのがソケットである。例えばWebブラウザも,ソケットを介して通信している。ソケットが提供するTCP/IPレベルの通信のうえに,HTTP(HyperText Transport Protocol)というアプリケーション・レベルのプロトコルを実装しているのだ。

写真1●ソケットを使ってWebサーバーの反応を取得する
ファイル名とサーバーを指定すると,指定したファイルをサーバーにリクエストする。
 
リスト1●接続したら,ファイルを送るようリクエスト
HTTP(HyperText Transfer Protocol)に従ってリクエストを発行している。ソケットを通じて取得した情報は,とりあえずメモ型のオブジェクトに表示させている。
図1●Webブラウザの動作手順
リンクをクリックしたり,文字で直接指定されるなどして対象となるURLを得ると,そこで指定されたHTMLファイルをまず受信する。ここでエラーが発生したら,適切にエラーを表示する。さらにHTMLを解析し,そこに埋め込まれている画像やリンク,文字装飾情報などを取得する。画像は別途ファイル単位に受信する必要がある。最終的にすべてをダウンロードしてレイアウトした結果を表示する,というのがWebブラウザの基本的な動作である。

 従ってソケットを使えば,Webサーバーから情報を得ることができる(写真1[拡大表示])。HTTPの規約に則ってリクエストを発行すれば,規約に則った形で返答が帰ってくるのだ。具体的に見てみよう(リスト1[拡大表示])。これはDelphiを使って記述した例である。接続したら,「GET ファイル名/HTTP 1.0」というリクエストを発行するようにしている。この指定方法がHTTPで定められていることだ。こうするとWebサーバーは,該当するファイルが存在する場合にそのファイルの内容を転送する。HTTPの基本的な仕組みはこれだけである。

HTMLを解釈して適切なファイルをダウンロード

 したがってWebブラウザの基本的な動作は,以下のようになる(図1[拡大表示])。まず母体となるHTMLファイルを受信する。そして,そのファイルの内容を解析して,画像データなど表示に必要なファイルを併せて受信する。しかるのちに,文字装飾やリンク情報などを加味したうえで,レイアウトを決めて表示するのである。バイナリ・ファイルをWebブラウザでダウンロードするとき,正しくデータが送信されるかどうかをHTTPのレベルでは特に考慮しない。

 こう書くととても単純なようだが,実際にはさまざまな面倒なことが発生する。まず,受信するファイルのタイプを適切に識別できなければならない。例えば画像データはGIFやJPEG,PNGなどさまざまな形態で保存されている。これをちゃんと表示するというのが基本である。また,レイアウトも決して簡単ではない。最近ではCSS(Cascading StyleSheet)を多用したサイトも多い。JavaScriptなどの実行環境も必要となる。事実オープンソースのWebブラウザ「Mozilla」のソースコードは膨大だ。マルチプラットフォーム対応というオーバーヘッドはあるにしても,圧縮して30M~40Mバイトに及ぶ。まともなレベルのブラウザを作るにはそれだけの労力が必要なのである。

(北郷 達郎、八木 玲子)