HTTPサーバを作る
きっかけ
最近、HTTPサーバを作っている。
と言っても、商用利用を考えているわけではなくて、学習目的だ。
何事も理解したいと思ったら自分で作ってみるのが一番だし、学習にはなるべく低レイヤーの方が良い。
明確にゴールを決めているわけではないけど、ひとまずGETメソッドでファイルコンテンツを返すところまで出来たので、区切りのエントリ。
プログラム
ソースはGitHubに置いてある。github.com
ので、細かい解説はしないが、ポイントだけ。
HTTPサーバと言っても、大きく2つのパートに分けられる。
1つはTCPコネクション周りで、ソース上はserver.cにあたる。
もう1つはHTTP周りの処理で、ソース上はhttp.cにあたる。
TCPパートは、コネクションに関する、socket -> bind -> listen -> acceptという定型的な処理があって、コネクションが成立した時のfork(並行サーバ)、コネクションが切断した時のシグナル処理なども含まれる。
この辺りの処理は、HTTPサーバに限らず、TCPによるコネクションを行うサーバであれば、ある程度共通になるだろう。
逆にHTTPパートは何をするかというと、TCPコネクション成立後のデータストリームの処理を行う。
HTTPだからと言って何か特別な処理をするわけではなくて、ソケットディスクリプタからreadしたデータ(HTTPリクエスト)に対して、HTTPプロトコルに則った処理を施して、ソケットディスクリプタにwrite (HTTPレスポンス) する処理を行う。
その意味では、HTTPとは正にプロトコル (規約) なんだなということを実感できる。
TCPについては以下の本が非常にためになった。
ピアソンエデュケーションでもう絶版かもしれないが。
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
- 作者: W.リチャードスティーヴンス,W.Richard Stevens,篠田陽一
- 出版社/メーカー: ピアソンエデュケーション
- 発売日: 1999/07
- メディア: 単行本
- 購入: 8人 クリック: 151回
- この商品を含むブログ (37件) を見る
HTTPについては以下の本が参考になると思う。
WebAPI開発の時に利用していたが、HTTPサーバの開発にも役立つと思う。
- 作者: 水野貴明
- 出版社/メーカー: オライリージャパン
- 発売日: 2014/11/21
- メディア: 大型本
- この商品を含むブログ (5件) を見る
HTTPクライアントには以下のアプリを利用している。