欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Nodejs關于gzip/deflate壓縮詳解

 更新時間:2015年03月04日 10:48:32   投稿:hebedich  
本文主要向大家介紹了nodejs中關于gzip/deflate壓縮的2種方法,分別是管道壓縮和非管道壓縮,十分詳細,并附帶示例,這里推薦給大家參考下。

0x01.關于

寫http時候,在接收http請求時候,出現(xiàn)亂碼,后來發(fā)現(xiàn)是gzip沒有解壓。

關于gzip/deflate壓縮,有放入管道壓縮,和非管道壓縮方法。

0x02.管道壓縮

Node中的I/O是異步的,因此對磁盤和網(wǎng)絡的讀寫需要通過回調(diào)函數(shù)來讀取數(shù)據(jù)。

當內(nèi)存中無法一次裝下需要處理的數(shù)據(jù)時,或者一邊讀取一邊處理更加高效時,我們就需要用到數(shù)據(jù)流。

NodeJS中通過各種Stream來提供對數(shù)據(jù)流的操作。

官網(wǎng)提供了管道方法:

復制代碼 代碼如下:

// client request example
var zlib = require('zlib');
var http = require('http');
var fs = require('fs');
var request = http.get({ host: 'homeway.me',
                     path: '/',
                     port: 80,
                     headers: { 'accept-encoding': 'gzip,deflate' } });
request.on('response', function(response) {
    var output = fs.createWriteStream('izs.me_index.html');
    switch (response.headers['content-encoding']) {
        // or, just use zlib.createUnzip() to handle both cases
        case 'gzip':
            response.pipe(zlib.createGunzip()).pipe(output);
            break;
        case 'deflate':
            response.pipe(zlib.createInflate()).pipe(output);
            break;
        default:
            response.pipe(output);
            break;
    }
});

0x03.非管道壓縮

代碼如下:

復制代碼 代碼如下:

#! /usr/local/bin/node
var http = require('http'),
    querystring = require('querystring'),
    zlib = require('zlib');
var args = {
    //參數(shù)以及備用數(shù)據(jù)
    contents : querystring.stringify({ 
        //發(fā)包的信息
        name:'homeway.me',
    }),
};
var options = {
    hostname: 'homeway.me',
    port: 80,
    path: '/',
    method: 'GET',
    headers: {
        'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8',
        'Content-Length': args.contents.length,
        'User-Agent':'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_2) AppleWebKit/537.36 (KHTML, like 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(chunks);
            if (encoding == 'gzip') {
                zlib.gunzip(buffer, function (err, decoded) {
                    data = decoded.toString();
                    callback( err, args, res.headers, data);
                });
            } else if (encoding == 'deflate') {
                zlib.inflate(buffer, function (err, decoded) {
                    data = decoded.toString();
                    callback( err, args, res.headers, data);
                });
            } else {
                data = buffer.toString();
                callback( 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);
});

以上就是Nodejs關于gzip/deflate壓縮的全部內(nèi)容了,希望大家能夠喜歡。

相關文章

  • 用NodeJS實現(xiàn)批量查詢地理位置的經(jīng)緯度接口

    用NodeJS實現(xiàn)批量查詢地理位置的經(jīng)緯度接口

    最近要實現(xiàn)一個顯示各個城市信息的功能,后臺一看包含一堆城市的excel,發(fā)現(xiàn)不僅有每個省的直轄市,還有二三線等的城市,數(shù)量還不少,一個個去查還挺浪費時間的,那為什么不寫個腳本去實現(xiàn)批量查詢呢。
    2016-08-08
  • Node.js Windows Binary二進制文件安裝方法

    Node.js Windows Binary二進制文件安裝方法

    這篇文章主要介紹了Node.js Windows Binary二進制文件安裝,本文給大家介紹的非常詳細,具有一定的參考借鑒價值 ,需要的朋友可以參考下
    2019-05-05
  • 吐槽一下我所了解的Node.js

    吐槽一下我所了解的Node.js

    用了一年多 Node.js, 現(xiàn)在已經(jīng)是 Node.js 的腦殘粉了,這篇日志比較雜,算是我對 Node.js 方方面面的一個集中吐槽。
    2014-10-10
  • node異步使用await和不用await的區(qū)別實例分析

    node異步使用await和不用await的區(qū)別實例分析

    這篇文章主要介紹了node異步使用await和不用await的區(qū)別,結合實例形式分析了node.js異步使用await和不用await的實例中,同步與異步執(zhí)行的區(qū)別,需要的朋友可以參考下
    2023-06-06
  • 詳解nvm管理多版本node踩坑

    詳解nvm管理多版本node踩坑

    這篇文章主要介紹了詳解nvm管理多版本node踩坑,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-07-07
  • Node.js的特點詳解

    Node.js的特點詳解

    本文主要對Node.js的特點進行詳細介紹。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • node.js中使用ejs渲染數(shù)據(jù)的代碼實現(xiàn)

    node.js中使用ejs渲染數(shù)據(jù)的代碼實現(xiàn)

    這篇文章主要介紹了node.js中使用ejs渲染數(shù)據(jù),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-11-11
  • nodejs事件的監(jiān)聽與觸發(fā)的理解分析

    nodejs事件的監(jiān)聽與觸發(fā)的理解分析

    這篇文章主要介紹了nodejs事件的監(jiān)聽與觸發(fā)的理解分析,以實例形式對比分析了nodejs與jQuery關于事件監(jiān)聽的實用技巧,有助于加深對nodejs的理解,需要的朋友可以參考下
    2015-02-02
  • NodeJS加密解密及node-rsa加密解密用法詳解

    NodeJS加密解密及node-rsa加密解密用法詳解

    要用nodejs開發(fā)接口,實現(xiàn)遠程調(diào)用,如果裸奔太危險了,就在網(wǎng)上找了一下nodejs的加密,感覺node-rsa挺不錯的,下面來總結一下簡單的rsa加密解密用法,需要的朋友可以參考下
    2018-10-10
  • node.js中的console.timeEnd方法使用說明

    node.js中的console.timeEnd方法使用說明

    這篇文章主要介紹了node.js中的console.timeEnd方法使用說明,本文介紹了console.timeEnd的方法說明、語法、使用實例和實現(xiàn)源碼,需要的朋友可以參考下
    2014-12-12

最新評論