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はいくつかみつけたんですが・・・)
どれか一つの質問へのお返事でも、結構です。よろしければご回答下さい。
No.1ベストアンサー
- 回答日時:
サッポロワークスさんのBlackJumboDog
http://www.spw02.sakura.ne.jp/spw/
久しぶりに見るとC#で再構築されているようですね。。。
過去のコードがどこかにあればよかったですが、、、
フレームワークを利用しているので、各種処理への手続きが簡略化されておりますが、大筋は読み取れると思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS WEBサイトの構築。表示データとWEBデザインを分離する考え方を専門用語・業界用語では何と言うか? 8 2022/09/27 09:16
- 大学受験 数学について、自分はテストになると、(1)とかの簡単な問題も、間違っていないか何回も確認したり、問題 5 2023/01/26 17:17
- 宇宙科学・天文学・天気 AIが答えた方程式 1 2023/02/20 00:12
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) CSVファイルがカンマ区切りにならない。対処法を教えていただきたいです。 仕事でSMS一斉送信ができ 2 2022/07/01 21:24
- その他(コンピューター・テクノロジー) 「プロトコル」の定義について 5 2023/04/16 13:13
- 大学受験 模試の直しについて質問いたします。かなり長くなります。 多くの人が模試の復習は自分の弱点を見つけ出す 2 2023/01/14 23:50
- 日本語 「~人」と「~名」の使い分け 2 2022/06/02 11:59
- 事件・犯罪 刑法についてだれか助けてください。 2 2022/06/05 04:08
- 大学受験 大学受験 辛い 英語 読めない こんにちは。 現在大学受験をしてる者です。 色々あり浪人なんですけど 11 2022/09/06 12:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
javaでのプログラミングで・・・
-
ソケットプログラミングに関す...
-
UDP通信する時に、相手にどうや...
-
ソケット通信 同じポート番号...
-
UDPで受信終了の合図を出して受...
-
VB2008にてRS232C通信をするソ...
-
TCP/IP通信でのコネクシ...
-
eclipseでのデバックについて
-
ソケット通信(サーバ側)について
-
ソケットとそれに基づくストリ...
-
空きポートの取得方法
-
JavaでBASIC認証突破
-
エクセル VBA でのCOMポート...
-
Linuxでパケットを発信する際・...
-
TCP/IP通信型プログラムです。 ...
-
マルチスレッドプログラミング...
-
Macターミナルで実行中のプログ...
-
VBAの配列サイズとメモリに関して
-
なんかC言語でプログラム書いて...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
TCP/IP通信時のサーバーからの受信
-
UDP通信におけるbind関数について
-
Winsockで接続待ちタイムアウト...
-
recv関数でフリーズしてしまう
-
VB6のwinsockでconnectできない
-
ソケットのクローズについて
-
UDP通信する時に、相手にどうや...
-
エクセル VBA でのCOMポート...
-
ソケットのrecvの戻り値が0
-
UdpClient 送信元のIPアドレ...
-
Socket通信の0バイト受信について
-
WinSockでの通信プログラムがう...
-
同じLAN内パソコンのIPアドレス...
-
ソケット通信 同じポート番号...
-
VC++でのソケット通信について
-
Connectエラーが出てしまう・・...
-
CreateFile関数でCOMポートが開...
-
Winsockを使わずにVBでSocketを...
-
VB6‥ソケットについて
-
SIPがNATを越えられない理由
おすすめ情報