以前自分とこの掲示板にも書いたのですが。
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=880&range=1
とはいえ、CGIはWebアプリケーションの基本ですから、(Perlでもよいので)一度は 作っておくべきものかとは思います。最近は、PHPやらJSPやらStrutsやら、果ては ASP.NET等いろいろ便利な道具があって、もちろんそれはそれでよいのですが、 結局下回りを知らないと困ることもありますから。 「本当の基礎からのWebアプリケーション入門 ―Webサーバを作ってみよう―」 なんての、誰か書いてくれませんかね…
http://kmaebashi.com/bbs/list.php?boardid=kmaebashibbs&from=883&range=1
昔、「インターネットを256倍使うための本」というのがあって、その中に、 「シェルによるhttpdの実装」というのがありました。 …今探したらソースが公開されていました。こちらです。 http://www.ascii.co.jp/books/support/4-7561-1663-9/supplement/0001/shttpd こちらによれば、 http://www.ascii.co.jp/books/support/4-7561-1663-9/supplement/ 「筆者が偉いんではなく、shが偉いんでもなく、ズバリinetdが偉い」そうですが、 その部分をJavaかなんかでちょろっと書いてしまえば、Webサーバとしての機能は すぐに実装できそうですし、それをベースにいろいろ拡張すれば勉強になるんじゃ ないかなあ、と思うわけです。ブラウザが何を送ってきてるのか目で見えますし、 どう対応すればいいかもわかるので。
私に時間が無限にあるならWebに書いてみたいところですが、今は無理なので…
Joel Spolskyが言うようにたいていの抽象化には漏れがあるものですが、とりわけWebアプリケーションの世界の抽象化は「だだ漏れ」に見えます。PHPだのJSPだのStrutsだのASP.NETだの、確かに便利なのですが、結局Webアプリゆえの制約に縛られている。抽象化の層を重ねれば重ねるほど、宣伝のサンプルのような簡単なケースと、いざはまった時の乖離は大きくなり、結局下の方を知らないと対処できないということが多々あります。それならやはり、下の方から順々に積み上げていくしかないのではないかと。
どのくらい下からやるかですが、TCPからでよいと思います(Joel on softwareにおいて漏れのある抽象化の例に出されているのがまさにTCPだというのが皮肉ではありますが)。
んで、Javaか何かで適当にサーバを書いて、ポート8080番とかを待ち構えるようにして、IE等のブラウザで
http://localhost:8080/hello.html
と叩いてみる。
次は逆にクライアントを作って、Apacheか何かに、さっきIEから来たリクエストと同じものを送ってやる*1。当然Apacheにはhello.htmlを置いておきます。すると、hello.htmlに相当するレスポンスが来ますから、それをそっくりコピペしたものを自作サーバから返すわけです。
そこまでできれば、プログラマなら、htmlファイルを対象としたWebサーバの作り方は見当がつくことでしょう。
RFCとか細かいことはひとまず置いといて、IEとApacheの実際の出力を見ながらやる方が飽きずに進めるんじゃないでしょうか。
あとは、
ぐらいの順番かなあ…
以上、妄想でした。