#99 HTTP Server
Webサービスを扱う以上、HTTPからは離れられません。今までなんとなくでやってきてしまってましたが、そろそろもっと深くまで理解したいと思います。
習うより慣れろ。
HTTPリクエストを受け付けて、単純なレスポンスを返すHTTPサーバーをC++で作ってみました。
HTTPサーバー
作成したプログラムはGitHubで公開しています。
最新のHTTP/1.1の仕様は、RFC9112として公開されています。必要な機能のほとんどに対応できていませんが、とりあえず「Hello World」とだけ返すようにしておきました。
makeでビルドすれば動かせます。
$ git clone https://github.com/tkusa/http_test.git
$ cd http_test
$ make
80ポートを使うので、root権限が必要になります。
$ sudo ./build/bin/server
Start simple HTTP Server
HTTPレスポンス
レスポンスは、RFCに準拠して以下のような形で返しています。
HTTP/1.1 200\r\n
Content-Length:13\r\n
\r\n
Hello World\r\n
\r\n
\r\n
curlでテストしてみます。
$ curl http://localhost
Hello World
できました!
まとめ
普段のWeb開発時には、ApacheやNginxのようなミドルウェアを利用しているので、HTTPの細かい仕様まで意識しません。しかし、理解しないままでは思わぬバグを作り込んでしまうかもしれません。
今回、RFCをしっかり読み込んで、実際にプログラムを書いてみたことで、さまざまな発見がありました。例えば、リクエストの宛先に絶対URIを使えるのは知りませんでした。絶対URIとHostヘッダーが両方含まれているときは、Hostヘッダーが無視されるというのも間違えそうな感じがします。
もっとRFCを読んで、精進します!
EOF
この記事が気に入ったらサポートをしてみませんか?