美文网首页
Node-gzip压缩

Node-gzip压缩

作者: 辻子路 | 来源:发表于2020-04-02 10:17 被阅读0次

前端时间有同事问我node如何做gzip压缩。 首先我们先来看下Header里面的Accept-Encoding。

Accept-Encoding

    HTTP 请求头 Accept-Encoding 会将客户端能够理解的内容编码方式——通常是某种压缩算法——进行通知(给服务端)。  
    通过内容协商的方式,服务端会选择一个客户端提议的方式,使用并在响应头 Content-Encoding 中通知客户端该选择。  

上面这段话通俗点说就是浏览器通过HTTP请求头部里加上Accept-Encoding,告诉服务器,“你可以用gzip,或者defalte算法压缩资源”。

Accept-Encoding:gzip, deflate  

然后服务器端压缩后,在响应头Content-Encoding中返回用了那种算法。

Zlib

那么在node中如何采用gzip压缩的,答案就是zlib这个包。
我们来小试牛刀下:

压缩

var fs = require('fs');
var zlib = require('zlib');

var gzip = zlib.createGzip();

var inFile = fs.createReadStream('./compress.txt');
var out = fs.createWriteStream('./compress.txt.gz');

inFile.pipe(gzip).pipe(out);

解压缩

var fs = require('fs');
var zlib = require('zlib');

var gunzip = zlib.createGunzip();

var inFile = fs.createReadStream('./compress.txt.gz');
var outFile = fs.createWriteStream('./compress.txt');

inFile.pipe(gunzip).pipe(outFile);

服务端gzip

var http = require('http');
var zlib = require('zlib');
var fs = require('fs');
var filePath = './test.html';

var server = http.createServer(function(req, res){
    var acceptEncoding = req.headers['accept-encoding'];
    var gzip;
    
    if(acceptEncoding.indexOf('gzip')!=-1){ // 判断是否需要gzip压缩
        
        gzip = zlib.createGzip();
        
        // 记得响应 Content-Encoding,告诉浏览器:文件被 gzip 压缩过
        res.writeHead(200, {
            'Content-Encoding': 'gzip'
        });
        fs.createReadStream(filePath).pipe(gzip).pipe(res);
    
    }else{

        fs.createReadStream(filePath).pipe(res);
    }

});

server.listen('3000');

结果如图:

压缩结果

服务器端压缩字符串

var http = require('http');
var zlib = require('zlib');

var responseText = 'hello gzip';

var server = http.createServer(function(req, res){
    var acceptEncoding = req.headers['accept-encoding'];
    if(acceptEncoding.indexOf('gzip')!=-1){
        res.writeHead(200, {
            'content-encoding': 'gzip'
        });
        res.end( zlib.gzipSync(responseText) );
    }else{
        res.end(responseText);
    }

});

server.listen('3000');

更多的压缩算法请看官方文档

相关文章

  • Node-gzip压缩

    前端时间有同事问我node如何做gzip压缩。 首先我们先来看下Header里面的Accept-Encoding。...

  • H264压缩技术

    帧内压缩技术 有损压缩 帧间压缩 有损压缩

  • 图片压缩

    Android图片压缩常用的有质量压缩、尺寸压缩、采样率压缩以及通过JNI调用libjpeg库来进行压缩(尺寸压缩...

  • shell命令整理(七)

    打包压缩 window打包压缩工具: linux打包压缩工具: 打包 解包 案例 压缩 解压缩 案例 打包压缩一起...

  • 10.压缩解压类

    压缩和解压类 压缩指令gzip,解压缩指令gunzipgzip 文件 // 压缩文件,只能压缩成....

  • iOS 图片压缩总结

    一.压缩方式和方法 1.压缩方式 1.1 质量压缩1.2 尺寸压缩1.3 质量和尺寸共同压缩 2.压缩方法 2.1...

  • Linux压缩命令

    .zip格式压缩与解压缩 .gz格式压缩与解压缩 .bz2格式压缩与解压缩 打包命令tar

  • zip压缩工具、tar打包、tar打包并压缩

    65 zip压缩工具 支持压缩目录 默认不支持解压windows下的rar文件 压缩、解压缩文件 压缩、解压缩目录...

  • day14 -文件压缩

    《 文件压缩 》zip压缩 格式 压缩工具 .zip ...

  • 压缩打包、gzip、bzip2、xz

    目录 一、压缩打包介绍二、gzip压缩工具三、bzip2压缩工具四、xz压缩工具 一、压缩打包介绍 简单的说,压缩...

网友评论

      本文标题:Node-gzip压缩

      本文链接:https://www.haomeiwen.com/subject/wamtphtx.html