少しのプログラムでHTTPリクエストを送信し、TCPプロトコルで応答を取得しました。Content-Lengthのないhttp要求の応答を取得していますか?
私のリクエストフォーマット。
GET/HTTP/1.0
Host: somewebsite.com
{two new line}
IはContent-Lengthヘッダを見つけるまで、私は(C#でNetworkStreamとのStreamReaderを使用して)ソケットからラインによる応答ラインを読み取ります。私は長さを保存し、空の行が見つかるまで読書を続けます。長さのバッファを作成し、残りの応答を受け取ります。
しかし、いくつかのreponsesにはcontent-lengthヘッダーがありません。だから私のアプローチは失敗します。何バイトを受け取るべきかわからない場合、いつ停止するべきですか?
非常に誤解を招くことです。レスポンスにcontent-lengthヘッダーフィールドがあり、チャンクエンコーディングを使用しない場合、それはあなたが持っている*唯一の情報です。より少ないコンテンツを受け取った場合、そのコンテンツは切り捨てられたものとみなされます。より多くのコンテンツを受け取った場合、視聴者は壊れているか、すでに次の応答を見ています。 –
クライアントが現在の解析を完了していないときに、次の応答が1つの固有のソケットでどのように起こるかを謙虚に尋ねています。私はdownvoteをよく理解するかもしれません。さもなければ、私はこの問題に関して大きな相違は見られません。宣言されたコンテンツの長さを読み取ったときに何をすればよいのでしょうか?ソケットのreadは2バイト以上残っていると伝えます。実際には、「愚かな壊れたサーバー、私はもうあなたと話をしません」と言っても、良いプログラマが望むほど頻繁には適用されません。 –
vtmarvin:クライアントがパイプライニングを使用できる。 –