Webアプリケーションが流行しています。Webブラウザ上で何でも実行させる昨今の風潮はいかがなものかと思いますが,これも時流なのかもしれません。Webプログラミングに習熟する前段階として,今回は基礎となるHTTPとCGIについて学びます。

 WWW(World Wide Web)はもともと欧州合同素粒子原子核研究機構(CERN)で開発された,相互リンクした技術文書を参照する手段でした。文書間のリンクが世界中をクモの巣(Web)のようにつなぐありさまをもってWWWと名づけられました。

 WWWが最初に登場した時点では,基本技術は次の3つしかありませんでした。

(1)HTML(HyperText Markup Language),相互にリンクされた構造を持つ文章を記述するマークアップ言語。

(2)URL(Uniform Resource Locator),各地のサーバーに分散した,文書を指定する記法。

(3)HTTP(Hypertext Transfer Protocol),URLで指定した文書をネットワーク経由でサーバーから取り出すためのプロトコル。

 ですから,基本的には静的な文章を表現する手段だったわけです。しかも,これら構成部品の基本部分は非常にシンプルでこれ以上削りようがないほどです。実はこのシンプルさがWWWの現在の発展の鍵だったのではないでしょうか。

 まずは古典的なこれら3つの技術について解説しましょう。

HTMLは構造化されたテキスト

 HTMLについては,今さら説明する必要はそれほどないかもしれません。HTMLはSGML(Standard Generalized Markup Language)と類似の構造を持つ文書フォーマットです。といっても,今ではSGMLを直接知っている人はほとんどいないでしょうから,むしろSGMLの方が「HTMLのような」とか言われてしまうのかもしれません。

 HTMLの最大の特徴は誰でも知っている「<HTML>…<HTML>」という対になったタグです。SGMLから受け継いだこのタグ・フォーマットは,さらにXMLに受け継がれて幅広い用途で使われています。

 HTMLは基本的に文書の構造(「見出し」,「個条書き」,「リンク」など)を表現します。しかし,文章の構造だけでなく,フォントの大きさや色などに代表される「見栄え」も指定できてしまう柔軟性(悪くいえばいいかげんさ)を備えています*1。シンプルなHTMLの例を図1に示します。



Welcome to Programming


まつもと直伝・プログラミングのオキテ

Webアプリケーションが流行しています。 Webブラウザで何でも実行させる昨今の風潮はいかがな ものかと思いますが,これも時流なのかもしれません。 Webプログラミングに習熟する前段階として, 今回は基礎となるHTTPとCGIについて学びます。

図1●HTMLの一例

資源の位置を示すURL

 WWWの基礎技術で最も一般的に広まったのは,URLでしょう。今や,テレビCMや広告のポスターにURLが含まれることは珍しくありませんし,お店で買ってきた商品のラベルにもURLが印刷されています。テレビやラジオでも放送中に「エイチ・ティー・ティー・ピー・コロン…」というくだりをしばしば耳にします。URLは「インターネット・アドレス」とも呼ばれるようです。文書やサイトを示すアドレスであるという意味からは間違っているわけではないものの,違和感があります。

 URLはインターネット上の資源(リソース)の位置を示しますが,最近はより上位の概念であるURI(Uniform Resource Indicator)と呼ばれることが多くなってきたようです。

 URLはいくつかの部分から構成されています(図2)。

図2●URLの構成要素
図2●URLの構成要素

 先頭部分の「スキーム」は通信手段を表します。どのプロトコルを使うかを示します。通常は「http」を用いますが,通信の秘密を保持するための暗号化手段SSL(Secure Socket Layer)を介したHTTPである「https」が指定されることもあります*2。ほかにも「ftp」や「gopher」,「mailto」などがあります。

 「ホスト」はその資源を保持しているコンピュータのアドレスです。「ポート」は接続に用いるソケットのポート番号です*3。省略すると80が使われます。

 URLの構成要素の最後が「パス」です。このパスはサーバーにそのまま渡され,サーバー側で解釈されます。先の図2の例では「~matz/20060912.html#p01」というリソースを要求していることになります。この例では「ユーザーmatzの公開している20060912.htmlというファイルでラベルp01が付いている位置」という意味が期待されますが,実際にサーバー側でそのような動作をしているという保証はありません*4