iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >Nodejs关于gzip/deflate压缩详解
  • 558
分享到

Nodejs关于gzip/deflate压缩详解

详解Nodejsgzip 2022-06-04 17:06:37 558人浏览 薄情痞子
摘要

0x01.关于 写Http时候,在接收http请求时候,出现乱码,后来发现是gzip没有解压。 关于gzip/deflate压缩,有放入管道压缩,和非管道压缩方法。 0x02.管道压缩

0x01.关于

Http时候,在接收http请求时候,出现乱码,后来发现是gzip没有解压。

关于gzip/deflate压缩,有放入管道压缩,和非管道压缩方法。

0x02.管道压缩

node中的I/O是异步的,因此对磁盘和网络的读写需要通过回调函数来读取数据。

当内存中无法一次装下需要处理的数据时,或者一边读取一边处理更加高效时,我们就需要用到数据流。

nodejs中通过各种Stream来提供对数据流的操作。

官网提供了管道方法:

// 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 = {

    //参数以及备用数据

    contents : querystring.stringify({  

        //发包的信息

        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压缩的全部内容了,希望大家能够喜欢。

--结束END--

本文标题: Nodejs关于gzip/deflate压缩详解

本文链接: https://www.lsjlt.com/news/12238.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 如何开启gzip和deflate压缩
    这期内容当中小编将会给大家带来有关如何开启gzip和deflate压缩,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。什么是压缩?大家还记得我们第一次接触winzip软件吗?非常神奇,一个文件,经过winz...
    99+
    2023-06-12
  • python利用gzip压缩解压缩Str
    When working with a data stream instead of a file, use the GzipFileclass directly to compress or uncompress it. T...
    99+
    2023-01-31
    解压缩 python gzip
  • Python压缩/解压gzip大文件
    Code tells all:#encoding=utf-8 #author: walker #date: 2015-10-26 #summary: 测试gzip压缩/解压文件 import gzip    BufSize = 1024*...
    99+
    2023-01-31
    大文件 Python gzip
  • nginx gzip 动态静态压缩详解
    目录前言动态压缩静态压缩动静结合前言 gzip压缩是解决编译产物体积过大、缩短静态资源请求时长的常用手段之一,我们在网站上经常能看到 Content-Encoding: ...
    99+
    2023-03-19
    nginx gzip动静态压缩 nginx gzip压缩
  • android中gzip数据压缩与网络框架解压缩
    目录theme: smartblue开GZIP有什么好处?Java中gzip压缩和解压实现字节流压缩:字节流解压:网络框架解压缩(gzip)使用步骤:构造消息发送类(post调用的对...
    99+
    2022-11-13
    android gzip数据压缩解压缩 android gzip 网络框架解压
  • Linux系统-gzip命令 – 压缩和解压文件
    gzip命令来自于英文单词gunzip的缩写,其功能是用于压缩和解压文件。gzip是一款使用广泛的压缩工具,文件经过压缩后一般会以.gz后缀结尾,与tar命令合用后即为.tar.gz后缀。 据统计,gzip命令对文本文件的压缩比率通常能达到...
    99+
    2023-10-24
    linux 运维 服务器 腾讯云 云计算
  • linux如何解压一个gzip格式的压缩包
    ...
    99+
    2024-04-02
  • android中gzip数据压缩与网络框架解压缩怎么实现
    这篇“android中gzip数据压缩与网络框架解压缩怎么实现”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“android中...
    99+
    2023-07-04
  • 如何在Linux中使用Gzip压缩和解压文件
    这篇文章主要介绍“如何在Linux中使用Gzip压缩和解压文件”,在日常操作中,相信很多人在如何在Linux中使用Gzip压缩和解压文件问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何在Linux中使用Gz...
    99+
    2023-06-13
  • Linux下的压缩解压缩命令详解
    linux zip命令 zip -r myfile.zip ./* 将当前目录下的所有文件和文件夹全部压缩成myfile.zip文件,-r表示递归压缩子目录下所有文件. unzip unzip -o -d /home/sunny myfil...
    99+
    2023-10-27
    linux 服务器 运维
  • Hadoop中的压缩与解压缩案例详解
    目录一:压缩的作用1.1:压缩的原则:1.2:MR支持的压缩编码1.3:压缩性能的比较1.4:压缩方式的选择压缩可以在MapReduce作用的任意阶段启用。 二:MapReduce数...
    99+
    2024-04-02
  • 基于Python实现文件的压缩与解压缩
    目录zip文件tar.gz文件rar文件7z文件在日常工作中,除了会涉及到使用Python处理文本文件,有时候还会涉及对压缩文件的处理。 通常会涉及到的压缩文件格式有: rar:W...
    99+
    2024-04-02
  • CentOS中zip压缩和unzip解压缩命令详解
    以下命令均在/home目录下操作cd /home #进入/home目录把/home目录下面的mydata目录压缩为mydata.zipzip -r mydata.zip mydata #压缩mydata目录把/home目录下面的mydata...
    99+
    2023-06-05
  • IIS启用GZIP压缩js和css无效如何解决
    这篇“IIS启用GZIP压缩js和css无效如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“IIS启用GZIP压缩js...
    99+
    2023-07-04
  • [Unity3D]关于U3D贴图格式压缩
    因为有不少人都问过我压缩格式的问题,今天飞哥又重新提醒了一次。整理一下发个贴,以供大家查阅和讨论。各种纹理格式,大家参照下U3D MANUAL里面的具体描述介绍,这是官方的东西。但我觉得有一部内容是错的,例如占用内存大小。http://do...
    99+
    2023-01-31
    格式 贴图 Unity3D
  • ZIP4j 压缩与解压的实例详解
    ZIP4j 压缩与解压的实例详解使用的jar包:zip4j_1.3.2.jar 基本功能: 针对ZIP压缩文件创建、添加、分卷、更新和移除文件 (读写有密码保护的Zip文件) (支持AES 128/256算法加密) (支持标准Zip算法加密...
    99+
    2023-05-31
    zip4j 压缩 解压
  • 解决OkHttp接收gzip压缩数据返回乱码问题
    目录问题请求头信息BridgeInterceptor拦截器问题 Retrofit 是现在最流行的网络开发框架之一,功能十分强大,但是最近确遇到一个十分坑的问题,现在记录下来,希望看到...
    99+
    2024-04-02
  • Python 解压缩文件详解
    zipfile模块及相关方法介绍: 1 压缩 1.1 创建zipfile对象 zipfile.ZipFile(file, mode='r', compression=0, allowZip64=True, compresslevel=Non...
    99+
    2023-01-31
    解压缩 详解 文件
  • 让gzip压缩速度加快的解决方法是什么
    让gzip压缩速度加快的解决方法是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。pig是是什么代码如下:A parallel implementation of gzip ...
    99+
    2023-06-13
  • 详解mysql表数据压缩
    目录【第一部分】一、表压缩概述:二、使用表的压缩三、InnoDB表的压缩优化1、何时用压缩表2、数据特性及压缩率3、数据库压缩和应用程序压缩4、工作负载特性和压缩率四、INNODB表...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作