0x01. 에 대한
HTTP를 작성할 때 HTTP 요청을 수신 할 때는 차량 코드가 나타납니다. 나중에 GZIP가 압축되지 않은 것을 발견했습니다.
GZIP/DEFLATE 압축과 관련하여 파이프 압축 및 비 파이프 압축을 넣는 방법이 있습니다.
0x02. 파이프 압축
노드의 I/O는 비동기식이므로 디스크 및 네트워크에 대한 읽기 및 쓰기에는 콜백 기능을 통해 데이터를 읽고 읽어야합니다.
처리 해야하는 데이터를 한 번에 메모리에로드 할 수 없거나 읽는 동안 처리가 더 효율적일 때 데이터 스트림을 사용해야합니다.
Nodejs는 다양한 스트림을 통해 데이터 스트림에 대한 작업을 제공합니다.
공식 웹 사이트는 파이프 라인 방법을 제공합니다.
코드 사본은 다음과 같습니다.
// 클라이언트 요청 예제
var zlib = 요구 ( 'zlib');
var http = 요구 ( 'http');
var fs = 요구 ( 'fs');
var request = http.get ({host : 'homeway.me',
길: '/',
포트 : 80,
헤더 : { 'accept-encoding': 'gzip, deflate'}});
request.on ( '응답', 함수 (응답) {
var output = fs.createWritestream ( 'izs.me_index.html');
switch (response.headers [ 'Content-Encoding']) {
// 또는 Zlib.createunzip ()을 사용하여 두 경우를 모두 처리하십시오
사례 'gzip':
응답 .pipe (zlib.creategunzip ()). 파이프 (출력);
부서지다;
사례 'deflate':
응답 .pipe (zlib.createInflate ()). 파이프 (출력);
부서지다;
기본:
응답 .pipe (출력);
부서지다;
}
});
0x03. 비 파이프 압축
코드는 다음과 같습니다.
코드 사본은 다음과 같습니다.
#! /usr/local/bin/node
var http = require ( 'http'),
querystring = require ( 'querystring'),
zlib = 요구 ( 'zlib');
var args = {
// 매개 변수 및 백업 데이터
내용 : querystring.stringify ({{
// 계약 정보
이름 : 'homeway.me',
}),
};
var 옵션 = {
호스트 이름 : 'homeway.me',
포트 : 80,
길: '/',
방법 : 'get',
헤더 : {
'accept': 'text/html, application/xhtml+xml, application/xml; q = 0.9, image/webp,*/*; q = 0.8',
'콘텐츠 길이': args.contents.length,
'사용자 에이전트': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebkit/537.36 (Gecko와 같은 KHTML) Chrome/42.0.2311.11 Safari/537.36',
'인코딩 수락': 'gzip, deflate',
},
};
var get = 함수 (옵션, args, 콜백) {
var req = http.request (옵션, 함수 (res) {
var chunks = [], data, encoding = res.headers [ 'content-encoding'];
// non-gzip/deflate는 UTF-8 형식으로 변환해야합니다
if (encoding === 'undefined') {
res.setencoding ( 'utf-8');
}
res.on ( 'data', function (chunk) {
chunks.push (청크);
});
res.on ( 'end', function () {
var buffer = buffer.concat (청크);
if (encoding == 'gzip') {
zlib.gunzip (버퍼, 함수 (err, decoded) {
data = decoded.tostring ();
콜백 (err, args, res.headers, data);
});
} else if (encoding == 'deflate') {
zlib.inflate (버퍼, 함수 (err, decoded) {
data = decoded.tostring ();
콜백 (err, args, res.headers, data);
});
} 또 다른 {
data = buffer.tostring ();
콜백 (null, args, res.headers, data);
}
});
});
req.write (args.contents);
req.end ();
};
get (옵션, args, 함수 (err, args, headers, data) {
console.log ( '==> 헤더 /n', 헤더);
console.log ( '== data /n', data);
});
위는 Gzip/deflate 압축에 대한 모든 nodejs입니다. 나는 모두가 그것을 좋아하기를 바랍니다.