見出し画像

#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


この記事が気に入ったらサポートをしてみませんか?