名前は今後考えるとして・・・。
まず、考えがあまかった。HTTP の仕様なんてほとんどみてなかった。リクエストラインとかレスポンスラインをとりあえず受信して、それをそのまま送信すればいいやって思ってた。でも仕様をみてみると、持続的接続とかあって単純に受信して送信って分けにはいかなかった。HTTP/1.0 だと切断することでメッセージの終わりがわかる。しかし、HTTP/1.1 だと 2 つのリクエストを連続して送ってくる場合もあるみたい。普通のサーバなら単純にレスポンスを順番に返せばいいが、プロキシだと接続先が違うかもしれない。ヘッダは文字列で扱って良いけど、メッセージボディは byte[] で扱わないといけないな。とかなやんでたら結構日にちたっちゃったなー。
んで今やってること。
- HttpRequest を理解し表すクラスを作る。Body は含まない。
- HttpResponse を理解し表すクラスを作る。Body は含まない。
- HttpRequest と HttpResponse を処理する Server を作る。プロキシの動作を行うクラス。Body の送受信する。
- ReadLine() と ReadBytes() の両方ができるクラス。StreamReader が byte[] で Read できれば良いのに。
とかそんな感じかな。今のところ、普通の Http サーバのような動作はできてる。keep-alive もとりあえず対応した。ただ、プロキシとなると実装が変わってくるので今後その作業。