8

次のスクリプトがあり、ノードが応答オブジェクトに Content-Length ヘッダーを含めていないようです。データを消費する前に長さを知る必要があります。データが非常に大きくなる可能性があるため、バッファリングしたくありません。

http.get('http://www.google.com', function(res){    

    console.log(res.headers['content-length']); // DOESN'T EXIST
});

オブジェクト ツリー全体をナビゲートしましたが、何も表示されません。他のすべてのヘッダーは「headers」フィールドにあります。

何か案は?

4

2 に答える 2

8

www.google.com はContent-Length. ヘッダーでわかるチャンクエンコーディングを使用します。Transfer-Encoding: chunked

応答本文のサイズが必要な場合は、resdataイベントをリッスンし、受信したバッファーのサイズをカウンター変数に追加します。発火するendと、最終的なサイズになります。

応答が大きいことが心配な場合は、カウンターがバイト数を超えたらリクエストを中止してください。

于 2013-08-26T18:00:52.370 に答える
3

すべてのサーバーがcontent-lengthヘッダーを送信するわけではありません。

例えば:

http.get('http://www.google.com', function(res) {
    console.log(res.headers['content-length']); // undefined
});

ただし、SO を要求する場合:

http.get('http://stackoverflow.com/', function(res) {
    console.log(res.headers['content-length']); // 1192916
});

応答からそのヘッダーを正しく取得しています.Googleはホームページに送信しません(代わりにチャンクエンコーディングを使用します)。

于 2013-08-26T17:59:44.667 に答える