1

私は nodeJS Proxy を開発していますが、Google Chrome の奇妙な動作に遭遇しました。これはFiddlerでも再現できます。

gzip 圧縮されたコンテンツをブラウザーに送信すると、異なる圧縮済み/解凍済みのコンテンツ サイズが認識されません。しかし、コンテンツはまだ正しく表示されています。

問題を再現するための小さなコードを次に示します。

var http         = require('http'),
    zlib         = require('zlib'),
    fs           = require('fs');


var Proxy = http.createServer(function(request, response) {
        var raw = fs.createReadStream('test');
        response.writeHead(200, {
                'content-encoding': 'gzip',
        });

        raw.pipe(zlib.createGzip()).pipe(response);
});

Proxy.listen(8000);

ファイル「test」にはダミーの HTML が含まれており、ファイルサイズは約 90KB です。次のようにコードをテストします。

$ curl localhost:8000 | gunzip

これは正しく機能するので、nodeJS コードは正しいと思います。

問題

ここに画像の説明を入力

これは、gzip された応答のスクリーンショットです。サイズコンテンツの値はほぼ同じです。しかし、受信した gzip されたコンテンツ ( Size ) は、解凍されたコンテンツ ( Content ) よりもはるかに小さいと予想されます。

また、期待される「Content-Encoding: gzip」ヘッダーが表示されません。また、「Content-Length」ヘッダーは、圧縮されていないファイルの長さを示しています。Fiddlerを介して HTTP トラフィックをパイプすると、同じ結果が得られます

ここに画像の説明を入力

この URL は、予期される動作を生成します。

http://www.heise.de/js/jquery/jquery-1.7.1.min.js

ここに画像の説明を入力

それで、私は何を間違っていますか?

Chrome で間違ったサイズが表示されるのはなぜですか? または、nodeJS コードは応答として何か間違ったものを送信しますか?

4

1 に答える 1