nodejs如何实现范围请求

  介绍

这篇文章主要介绍了nodejs如何实现范围请求,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获、下面让小编带着大家一起了解一下。

JS是什么

JS是JavaScript的简称,它是一种直译式的脚本语言,其解释器被称为JavaScript引擎,是浏览器的一部分,主要用于web的开发,可以给网站添加各种各样的动态效果,让网页更加美观。

使服务器支持范围请求,允许客户端只请求文档的一部分。其流程是:

<李>

客户端向服务端发起请求

<李>

服务端响应,附上Accept-Ranges头(值表示表示范围的单位,通常是“字节”),告诉客户端其接受范围请求

<李>

客户端发送新的请求,附上范围头,告诉服务端请求的是一个范围

<李>

服务端收到范围请求,分情况响应:

<李>

范围有效,服务端返回206年部分内容,发送指定范围内内容,并在含量头中指定该范围

<李>

范围无效,服务端返回416不可以满足的要求范围,并在含量中指明可接受范围

请求中范围的头格式为(这里不考虑多范围请求了):

范围:,字节=[开始]-[结束]

其中开始和结束并不是必须同时具有:

<李>

如果结束省略,服务器应返回从开始位置开始之后的所有字节

<李>

如果开始省略,结束值指的就是服务器该返回最后多少个字节

<李>

如果均未省略,则服务器返回开始和结束之间的字节

响应中的含量头有两种格式:

当范围有效返回206时:

的含量:,bytes (开始)-(结束)/(总)

当范围无效返回416时:

的含量:,bytes  */(总)//代码实现   res.setHeader (& # 39; Content-Range& # 39;,,“bytes  */$ {totalSize}”);

添加函数处理范围请求:

【注意】这里吧不合理的范围请求直接设置为返回全部,如果想设置范围错误就直接不返回可以设置http状态码为416

/* *   ,*范围请求   ,*不在合理的范围内就直接返回所有   ,*在合理规范的范围内就按照返回对应的部分   ,* @param  {*}, totleSize 总的范围   ,* @param  {*}, req    ,* @param  {*}, res    ,*/module.exports =, (totleSize,点播,,res),=祝辞,{   const 才能;range =, req.headers[& # 39;范围# 39;];   if 才能;(!),{   ,,,return {代码:200};   ,,}   ,   const 才能;sizes =, range.match(/字节=(\ d *) - (\ d *)/);   const ,才能最终获得=,大小[2],| |,totleSize 作用;1;   const 才能;start =,大小[1],| |,totleSize 作用;终结;//才能不规范的范围,是要直接一起返回,所以设置状态码200   如果才能(start 祝辞,最终获得| |,start  & lt;, 0, | |,最终获得祝辞,totleSize), {   ,,,return {代码:200};   ,,}   res.setHeader才能(& # 39;Accept-Ranges& # 39;,, & # 39;字节# 39;);   res.setHeader才能(& # 39;Content_Range& # 39;,,“bytes  ${开始}-{结束}/{totleSize}’美元);   res.setHeader才能(& # 39;Content_Length& # 39;,, end-start);   return {才能   ,,,代码:,206年,   ,,,开始:,方法(开始),   ,,,:,方法(结束)   ,,};   };

范围读取:

let 遥感;   const {,代码,首先,,最终获得},=,范围(stats.size,点播,,res);   if  (code ===, 200), {   时间=res.statusCode 才能;200;   时间=rs 才能;fs.createReadStream (filePath);   },{else    时间=res.statusCode 才能;206;//表示是部分内容//创才能建一个流读取文件,,{,,}结束表示文件读取的起始点和终点   rs 才能=,fs.createReadStream (filePath,,{,开始,最终获得});   }   ,//有这个管就不需要再去调用结束了,这样直接调用最终会导致res接受不到东西,因为管是异步的   rs.pipe (res);

感谢你能够认真阅读完这篇文章,希望小编分享的“nodejs如何实现范围请求”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

nodejs如何实现范围请求