NodeJS服务器实现gzip压缩的示例代码

  

本文介绍了NodeJS服务器实现gzip压缩,分享给大家,具体如下:

  

 NodeJS服务器实现gzip压缩的示例代码

  

在浏览器向服务器请求静态资源时,服务器为了减小在网络传输过程中消耗的流量和时间,都是将静态资源经过压缩后返回给服务器的,实现压缩的算法有<代码>缩小和<代码> gzip> gzip 压缩。

  

  

在浏览器和服务器之间通过<代码> gzip 压缩流实现传输的过程可以用下图表示。

  

 NodeJS服务器实现gzip压缩的示例代码

  

当浏览器向服务器请求静态资源,服务器会将静态资源经过处理转换为压缩流,大大减小文件体积,然后将压缩流返回给浏览器,浏览器通过压缩的类型重新将压缩流解析成静态文件。

  

  

<强> 1,压缩

  

在NodeJS中通过<代码> zlib 模块帮助我们实现不同类型的压缩,其实压缩的过程就是创建流的过程,创建的压缩流是变换类型(转化流),读取文件的内容经过转化流创建一个新类型的文件。

        const zlib=要求(“zlib”);   const fs=要求(fs);   const path=要求(“路径”);//压缩   函数gzip(源){//处理输入和输出的文件路径   让路径=路径。加入(__dirname、源);   让gzipPath=$ {sourcePath} . gz的;//创建转化流   让gzip=zlib.createGzip ();//创建可读流   让rs=fs.createReadStream(路径);//创建可写流   让ws=fs.createWriteStream (gzipPath);//实现转化   rs.pipe (gzip) .pipe (ws);   }      gzip (index . html),      

执行上面代码查看根目路是否出现<代码>索引。广州压缩包。

  

<强> 2,解压

  

压缩的过程是可逆的,可以压缩就可以解压,无论是在浏览器还是在服务器,我们下面实现解压的方法。

        const zlib=要求(“zlib”);   const fs=要求(fs);   const path=要求(“路径”);//解压   函数gunzip(源){//处理输入和输出的文件路径   让路径=路径。加入(__dirname、源);   让filePath=路径。加入(__dirname路径。:来源,. gz));//创建转化流   让解压=zlib.createGunzip ();//创建可读流   让rs=createReadStream(路径);//创建可写流   让ws=createWriteStream (filePath);//实现转化   rs.pipe(解压缩).pipe (ws);   }      gunzip (“index.html.gz”);      <代码>

删除原来索引。> index . html

  

<>强服务器的实现

  

在浏览器与服务器的交互中,浏览器其实会通过请求头接受编码<代码> 告诉服务器当前支持解压的压缩格式,值为<代码> gzip,缩小,br> 隔开,服务器在接收到浏览器请求后,会按照请求头的格式压缩资源,将压缩后的资源返回,并通过响应头<代码>内容编码告诉浏览器当前服务器压缩的格式。

     //引入依赖   const http=要求(“http”);   const url=要求(“url”);   const path=要求(“路径”);   const fs=要求(fs);   const zlib=要求(“zlib”);//创建服务器   const=http服务器。res createServer(点播)=比;{//处理路径名,“/笔蹦隙寥 ?index . html”   让{路径名}=url.parse(点播。url,真实);   路径名=路径名!=="/" & # 63;路径名:“/index . html”;//获取读取文件的绝对路径   让p=路径。加入(__dirname路径名);//查看路径是否合法   fs。访问(p,呃=比;{//路径不合法则直接中断连接   如果(err)返回res.end(“没有找到”);//获取浏览器支持的压缩格式   让编码=req.headers(“接受编码”);//创建可读流   让rs=fs.createReadStream (p);//支持gzip使用gzip压缩,支持缩小使用缩小压缩   如果编码,,encoding.match (/\ bgzip \ b/)) {   让压缩=zlib.createGzip ();   让compressType=" gzip ";   }else if(编码,,encoding.match (/\ bdeflate \ b/)) {   让压缩=zlib.createDeflate ();   让compressType=八跣 ?   其他}{//否则直接返回可读流   返回rs.pipe (res);   }//将压缩流返回并设置响应头   res.setHeader(“内容编码”,compressType);   rs.pipe(压缩).pipe (res);   });   });      服务器。听(3000年,()=比;{   控制台。日志(“服务器启动3000”);   });

NodeJS服务器实现gzip压缩的示例代码