0x01. О
При написании HTTP, искаженное код появляется при получении HTTP -запросов. Позже я обнаружил, что Gzip не декомпрессирован.
Что касается сжатия Gzip/Devtate, существуют методы для введения сжатия труб и сжатия без труба.
0x02. Компрессия Pipe
Ввод -вывод в узле является асинхронным, поэтому чтение и написание диска и сети требует чтения и записи данных с помощью функций обратного вызова.
Когда данные, которые необходимо обрабатывать, не могут быть загружены в памяти за один раз или когда обработка более эффективна при чтении, нам необходимо использовать потоки данных.
Nodejs предоставляет операции по потокам данных через различные потоки.
Официальный веб -сайт предоставляет методы трубопровода:
Кода -копия выглядит следующим образом:
// Пример запроса клиента
var zlib = require ('zlib');
var http = require ('http');
var fs = require ('fs');
var request = http.get ({host: 'homeway.me',
путь: '/',
Порт: 80,
Заголовки: {'Accept-Coding': 'gzip, Deflate'}});
request.on ('response', function (response) {
var output = fs.createwritestream ('izs.me_index.html');
Switch (response.Headers ['content-кодирование']) {
// или просто используйте zlib.createunzip (), чтобы обработать обоих случаев
case 'gzip':
response.pipe (zlib.creategunzip ()). Pipe (выход);
перерыв;
case 'Deflate':
response.pipe (zlib.createinflate ()). Pipe (выход);
перерыв;
по умолчанию:
response.pipe (выход);
перерыв;
}
});
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,
путь: '/',
Метод: 'Get',
Заголовки: {
'Принять': 'text/html, application/xhtml+xml, application/xml; q = 0,9, image/webp,*/*; q = 0,8',
'Content-Dength': args.contents.length,
«Пользовательский агент»: 'Mozilla/5.0 (Macintosh; Intel Mac OS x 10_10_2) AppleWebkit/537.36 (khtml, как гекко) Chrome/42.0.2311.11 Safari/537.36',
'Принять, кодирование': 'gzip, deflate',
},
};
var get = function (options, args, обратный вызов) {
var req = http.request (options, function (res) {
var chunks = [], data, кодирование = res.headers ['content-кодирование'];
// не-гзип/дефтат должен быть преобразован в формат UTF-8
if (кодирование === 'undefined') {
res.setEncoding ('UTF-8');
}
res.on ('data', function (chunk) {
кусочки. Push (Chunk);
});
res.on ('end', function () {
var buffer = buffer.concat (кусочки);
if (кодирование == 'gzip') {
zlib.gunzip (буфер, функция (err, decoded) {
data = decoded.toString ();
обратный вызов (err, args, res.headers, data);
});
} else if (кодирование == 'Deflate') {
zlib.inflate (buffer, function (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 (параметры, аргументы, функция (Err, args, заголовки, данные) {
console.log ('==> Header /n', заголовки);
console.log ('== data /n', data);
});
Вышеуказанное - все Nodejs о Gzip/Devtate Compression. Я надеюсь, что всем понравится.