Chapter 04

へなちょこWebサーバーを作る

bigen1925
bigen1925
2021.03.06に更新

Webサーバーを作る手順

いきなり「Webサーバーとはこういうものです」と解説を始めると、急に難解な本になってしまいます。

なので、できるだけ説明と勉強を少なくするために、実際にブラウザとWebサーバーがやりとりしている通信を盗み見て、それを最小限に再現する真似っ子サーバーを作ることにしましょう。
意味を理解するのは後です。

実際にプログラムをインストールしたりコードを書いたりするのは次章以降にして、この章ではその手順のみを説明します。

  1. ChromeとApacheで通信してみる
  2. Chromeと自作サーバーで通信してみる
  3. 自作クライアントとApacheで通信してみる
  4. 自作サーバーを進化させる

STEP1: ChromeとApacheで通信してみる

世界的によく使われているWebサーバーの1つにApacheというものがあります。
まずは、このApacheというWebサーバーを自分のPC内で起動して、自分のPC内で起動したブラウザからアクセスしてみることにします。

「自分のマシンで動いているブラウザというプログラム」と、
「自分のマシンで動いているApacheというプログラム」で通信をする、
ということです。

ブラウザはなんとなくChromeを使うことにしました。特に理由はありません。

これで、普通にやりとりするブラウザとWebサーバーが用意できます。

なぜApacheを使うか?

単にWebサーバーというと、Apache以外にも色々なプログラムがあります。

有名所ですと、Nginx,IIS, Tomcat などがありますし、各言語ごとの標準ライブラリとして組み込まれているもの(Node.jshttpモジュールや、Pythonhttpモジュールなど)もあります。

今回実験対象としてApacheを選んだのは、2020年11月現在も世界的シェアトップ[1] でありながら標準機能がシンプルで、かつMacに標準で搭載されているため教材としては向いていたためです。

興味がある方は、Apacheの代わりにNginxなどを自分のマシンにインストールし、本書の実験を試してみるのも良いかもしれません。

STEP2: ブラウザと自作サーバーで通信してみる

「じゃあ早速ChromeとApacheの通信を覗き見て、Apacheの代わりになるような真似っ子Webサーバーを作ってやるぜ!」
とやりたいところですが、他人が作ったプログラムの通信を傍受するのは結構大変です。

なのでまずは、 通信の受け取りだけ ができる簡単なサーバーを自作して、Apacheと置き換えてみます。

この自作のへなちょこサーバーは通信の受け取りだけはできるので、ブラウザが送ってきた通信内容を見ることができます。
本当はApacheが返すような返事をブラウザに返すことができればいいのですが、私たちはまだApacheがどのような返事を返しているのかを知りません。
ですので、このサーバーはブラウザに返事を返すことはしないことにします。
ブラウザにはエラーが表示されるでしょうが、最初はそれで十分です。

しかしこれでとりあえず、 「ブラウザがWebサーバーにどんなリクエストを送っているか」 を知ることが出来ます。

STEP3: 自作クライアントとApacheで通信してみる

今度は、ブラウザの代わりになるようなクライアント[2]を自作してみます。
この自作のへなちょこクライアントは、ブラウザのように色々なページを色々なやり方でサーバーに要求することはできません。

しかし、STEP2でChromeがWebサーバーへ送っている内容は分かっていますので、その内容をApacheへそのまま送りつけることはできます。
すると、ApacheはまともなWebサーバーですので、まともな返事をしてくれます。
自作クライアントではこれを受け取れば 「Webサーバーがどのようなレスポンス[3] を返すのか」 が分かるという寸法です。

STEP4: 自作サーバーを進化させる

STEP3で、世間一般のWebサーバーはどんなレスポンスを返すのかが分かるはずなので、自作サーバーがきちんとしたレスポンスを返せるように進化させましょう。

自作サーバーがそれなりにまともなレスポンスを返せるようになると、ブラウザにはエラー画面ではなくWebページっぽいのが表示されるようになります。

ここまでできると、「へなちょこWebサーバー」の完成です。

それでは、次章をお楽しみに!

脚注
  1. https://w3techs.com/technologies/history_overview/web_server ↩︎
  2. サーバーと通信するプログラムを、総称してクライアントと呼びます ↩︎

  3. リクエストに対する応答をレスポンスといいます。 ↩︎