0x01。について
HTTPを作成するとき、HTTPリクエストを受信するときにCarled Codeが表示されます。その後、GZIPが減圧されていないことがわかりました。
GZIP/デフレート圧縮に関しては、パイプ圧縮と非パイプ圧縮を入れる方法があります。
0x02.パイプ圧縮
ノードのI/Oは非同期であるため、ディスクとネットワークの読み取りと書き込みには、コールバック関数を介してデータを読み書きする必要があります。
処理する必要があるデータを一度にメモリにロードできない場合、または読み取り中に処理がより効率的になる場合は、データストリームを使用する必要があります。
nodejsは、さまざまなストリームを介してデータストリームの操作を提供します。
公式ウェブサイトはパイプラインの方法を提供しています。
コードコピーは次のとおりです。
//クライアント要求の例
var zlib = require( 'zlib');
var http = require( 'http');
var fs = require( 'fs');
var request = http.get({host: 'homeway.me'、
パス: '/'、
ポート:80、
ヘッダー:{'accept-encoding': 'gzip、deflate'}});
request.on( 'response'、function(response){
var output = fs.createwritestream( 'izs.me_index.html');
switch(response.headers ['content-encoding']){
//または、zlib.createunzip()を使用して、両方のケースを処理します
ケース 'gzip':
Response.pipe(zlib.creategunzip())。pipe(output);
壊す;
ケース「デフレート」:
Response.Pipe(zlib.createinflate())。pipe(output);
壊す;
デフォルト:
Response.Pipe(output);
壊す;
}
});
0x03。パイプ以外の圧縮
コードは次のとおりです。
コードコピーは次のとおりです。
#! /usr/local/bin/node
var http = require( 'http')、
queryString = require( 'querystring')、
zlib = require( 'zlib');
var args = {
//パラメーターとバックアップデータ
内容:QueryString.Stringify({
//契約情報
名前: 'Homeway.me'、
})、
};
var options = {
ホスト名: 'homeway.me'、
ポート:80、
パス: '/'、
方法:「取得」、
ヘッダー:{
'Accept': 'text/html、application/xhtml+xml、application/xml; q = 0.9、image/webp、*/*; q = 0.8'、
「コンテンツレングス」:args.contents.length、
'user-agent': 'Mozilla/5.0(Macintosh; Intel Mac OS X 10_10_2)AppleWebkit/537.36(Khtml、Geckoのような)Chrome/42.0.2311.11 Safari/537.36'、
「Accept-Encoding」:「Gzip、deflate」、
}、
};
var get = function(options、args、callback){
var req = http.request(options、function(res){
var chunks = []、data、encoding = res.headers ['content-encoding'];
//非gzip/deflateはUTF-8形式に変換する必要があります
if(encoding === 'undefined'){
Res.SetEncoding( 'UTF-8');
}
res.on( 'data'、function(chunk){
chunks.push(chunk);
});
res.on( 'end'、function(){
var buffer = buffer.concat(チャンク);
if(encoding == 'gzip'){
zlib.gunzip(バッファ、関数(err、decoded){
data = decoded.toString();
callback(err、args、res.headers、data);
});
} else if(encoding == 'deflate'){
zlib.inflate(バッファー、関数(err、decoded){
data = decoded.toString();
callback(err、args、res.headers、data);
});
} それ以外 {
data = buffer.toString();
コールバック(null、args、res.headers、data);
}
});
});
req.write(args.contents);
req.end();
};
get(options、args、function(err、args、headers、data){
console.log( '==> header /n'、headers);
console.log( '== data /n'、data);
});
上記はすべて、GZIP/デフレート圧縮に関するすべてのnodeJです。みんなが気に入ってくれることを願っています。