介绍
这篇文章主要介绍了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如何实现范围请求”这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!