「ソケットって,プログラムからすると無手順でデータを送ってると考えていいんですよね」
「うん」
「でも,通信ってよくデータが化けるって言うじゃないですか。どうやって正しいデータを送るんですか」
「どうやってと言ってもなあ。そんなに化けないよ。インターネットなら下の方ではTCP/IPがちゃんと送ってくれるし,アプリケーション・レベルのプロトコルが正しければ大丈夫だよ」
「本当ですかぁ」
インターネットを利用するプログラムなど,多くのプログラムが利用するTCP/IP。TCP/IPを利用した通信をする際の,出入口となるのがソケットである。例えばWebブラウザも,ソケットを介して通信している。ソケットが提供するTCP/IPレベルの通信のうえに,HTTP(HyperText Transport Protocol)というアプリケーション・レベルのプロトコルを実装しているのだ。
|
|
従ってソケットを使えば,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バイトに及ぶ。まともなレベルのブラウザを作るにはそれだけの労力が必要なのである。