プロが教えるわが家の防犯対策術!

HTTP1.1のProxyServerを作りたい

いきなりですが、私がこの質問をするにいたったまでの経緯を話させていただきます。その後、その経緯を踏まえたうえで何点か質問があるのですが、それは後に書きます。

現在HTTP1.1のProxyServerを、C言語でBSDソケットを使って作成しようとしています。
しかし通信がうまくいきません。自分なりにおそらくこれが原因ではないかという、あたりをつけたんですが、その原因の解決方法がわかりません。その原因とは、
レスポンスのデータの区切りがわからないせいでデータがごっちゃになっているのではないか?。とうことです。
もう少し詳しく言うと、WebServerは、HTTP1.1Proxyは持続的接続を前提としたパイプライン接続をサポートしていると考えて通信しているため、一つのソケットに対して複数のレスポンスを返す。しかし現在の自分の書いているソースでは、一つのソケットから読み取れるだけ読み取ってそれをすべてclientのソケットに書き込んでいるため、レスポンスの区別がついていないのではないか?というのが問題点ではないかと考えています。

これを解決するためには、レスポンスのデータを区切りらなくてはなりません。それを知るためにはヘッダのContent-Lengthラベルを、読むのが一番早いのではないかと考えていますが、Transfer-Encodingなるプロトコルがあるようで、これを使って送信されてくるレスポンスの場合はContent-Lengthが使えません(データ部がhtmlの場合は大抵Transferを使っています)。なのでこのTransferプロトコルに対応するプログラムを書く必要性があるのですが、そのためにはデータ部を見なくてはいけないようなのですが、多くのレスポンスはデータ部をgzipで圧縮して送ってきています。

この過程を踏まえたうえでいくつか質問があります。
1つは、まずこの過程の上で何か自分は間違った解釈(プロトコルの理解違いや、問題点の見間違え等)をしていないでしょうか?
2つ目は、C(OSはlinux(Iphone)を使っています。)でgzipを解凍するための方法がわかりません。なにか参考になるサイトはないでしょうか?
3つ目は、参考になるHTTP1.1ProxyServerないしはクライアントの、ソースコードはないでしょうか?(1.0はいくつかみつけたんですが・・・)

どれか一つの質問へのお返事でも、結構です。よろしければご回答下さい。

A 回答 (1件)

サッポロワークスさんのBlackJumboDog


http://www.spw02.sakura.ne.jp/spw/


久しぶりに見るとC#で再構築されているようですね。。。
過去のコードがどこかにあればよかったですが、、、


フレームワークを利用しているので、各種処理への手続きが簡略化されておりますが、大筋は読み取れると思います。
    • good
    • 0
この回答へのお礼

返事おそくなってすいません。
このようなサイトがあったんですね。参考にさせていただきました。ありがとうございます。

お礼日時:2010/09/03 06:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!