最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

nodejs實現(xiàn)范圍請求的實現(xiàn)代碼

 更新時間:2018年10月12日 10:27:26   作者:huyao_road  
這篇文章主要介紹了nodejs實現(xiàn)范圍請求的實現(xiàn)代碼,使服務(wù)器支持范圍請求,允許客戶端只請求文檔的一部分,非常具有實用價值,需要的朋友可以參考下

使服務(wù)器支持范圍請求,允許客戶端只請求文檔的一部分。其流程是:

  1. 客戶端向服務(wù)端發(fā)起請求
  2. 服務(wù)端響應(yīng),附上Accept-Ranges頭(值表示表示范圍的單位,通常是“bytes”),告訴客戶端其接受范圍請求
  3. 客戶端發(fā)送新的請求,附上Ranges頭,告訴服務(wù)端請求的是一個范圍
  4. 服務(wù)端收到范圍請求,分情況響應(yīng):
    1. 范圍有效,服務(wù)端返回206 Partial Content,發(fā)送指定范圍內(nèi)內(nèi)容,并在Content-Range頭中指定該范圍
    2. 范圍無效,服務(wù)端返回416 Requested Range Not Satisfiable,并在Content-Range中指明可接受范圍

請求中的Ranges頭格式為(這里不考慮多范圍請求了):

Ranges: bytes=[start]-[end]

其中 start 和 end 并不是必須同時具有:

  • 如果 end 省略,服務(wù)器應(yīng)返回從 start 位置開始之后的所有字節(jié)
  • 如果 start 省略,end 值指的就是服務(wù)器該返回最后多少個字節(jié)
  • 如果均未省略,則服務(wù)器返回 start 和 end 之間的字節(jié)

響應(yīng)中的Content-Range頭有兩種格式:

當(dāng)范圍有效返回 206 時:

Content-Range: bytes (start)-(end)/(total)

當(dāng)范圍無效返回 416 時:

Content-Range: bytes */(total)
//代碼實現(xiàn)
res.setHeader('Content-Range', `bytes */${totalSize}`);

添加函數(shù)處理范圍請求:

【注意】這里吧不合理的范圍請求直接設(shè)置為返回全部,如果想設(shè)置范圍錯誤就直接不返回可以設(shè)置http狀態(tài)碼為416

/**
 * 范圍請求
 * 不在合理的范圍內(nèi)就直接返回所有
 * 在合理規(guī)范的范圍內(nèi)就按照返回對應(yīng)的部分
 * @param {*} totleSize 總的范圍
 * @param {*} req 
 * @param {*} res 
 */
module.exports = (totleSize, req, res) => {
  const range = req.headers['range'];
  if (!range) {
    return {code: 200};
  }
 
  const sizes = range.match(/bytes=(\d*)-(\d*)/);
  const end = sizes[2] || totleSize - 1;
  const start = sizes[1] || totleSize - end;
  //不規(guī)范的范圍,是要直接一起返回,所以設(shè)置狀態(tài)碼200
  if(start > end || start < 0 || end > totleSize) {
    return {code: 200};
  }
  res.setHeader('Accept-Ranges', 'bytes');
  res.setHeader('Content_Range', `bytes ${start}-${end}/${totleSize}`);
  res.setHeader('Content_Length', end-start);
  return {
    code: 206,
    start: parseInt(start),
    end: parseInt(end)
  };
};

范圍讀取:

let rs;
const { code, start, end } = range(stats.size, req, res);
if (code === 200) {
  res.statusCode = 200;
  rs = fs.createReadStream(filePath);
} else {
  res.statusCode = 206;//表示是部分內(nèi)容
  //創(chuàng)建一個流讀取文件, {start, end}表示文件讀取的起始點和終點
  rs = fs.createReadStream(filePath, { start, end });
}
 
//有這個pipe就不需要再去調(diào)用end了,這樣直接調(diào)用end會導(dǎo)致res接受不到東西,因為pipe是異步的
rs.pipe(res);

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用puppeteer爬取網(wǎng)站并抓出404無效鏈接

    使用puppeteer爬取網(wǎng)站并抓出404無效鏈接

    自動化技術(shù)可以幫助我們做自動化測試,本篇文章主要介紹了使用puppeteer爬取網(wǎng)站并抓出404無效鏈接,可以檢查出無效鏈接,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • npm配置淘寶鏡像的教程詳解

    npm配置淘寶鏡像的教程詳解

    npm淘寶鏡像,也稱為npm cnpm或npm.taobao.org,是一個針對npm包管理器的國內(nèi)鏡像服務(wù),通過設(shè)置npm淘寶鏡像,你可以更快地下載和安裝依賴,本文給大家介紹了npm配置淘寶鏡像的教程,需要的朋友可以參考下
    2024-07-07
  • 利用node.js如何創(chuàng)建子進程詳解

    利用node.js如何創(chuàng)建子進程詳解

    之前看多進程這一章節(jié)時發(fā)現(xiàn)這塊東西挺多,寫Process模塊的時候也有提到,今天下午午休醒來靜下心來好好的看了一遍,發(fā)現(xiàn)也不是太難理解。所以下面這篇文章主要給大家介紹了關(guān)于利用node.js如何創(chuàng)建子進程的相關(guān)資料,需要的朋友可以參考下。
    2017-12-12
  • Node.js中的Buffer對象及創(chuàng)建方式

    Node.js中的Buffer對象及創(chuàng)建方式

    node.js提供了一個Buffer對象來提供對二進制數(shù)據(jù)的操作,Buffer?類的實例類似于整數(shù)數(shù)組,但?Buffer?的大小是固定的、且在?V8?堆外分配物理內(nèi)存。本文給大家介紹Node.js中的Buffer對象及創(chuàng)建方式,感興趣的朋友一起看看吧
    2022-01-01
  • 了解javascript中變量及函數(shù)的提升

    了解javascript中變量及函數(shù)的提升

    這篇文章主要介紹了關(guān)于javascript中變量及函數(shù)的提升,下面和小編來一起學(xué)習(xí)吧
    2019-05-05
  • NodeJS中Buffer模塊詳解

    NodeJS中Buffer模塊詳解

    這篇文章主要介紹了NodeJS中Buffer模塊詳解,十分的詳細,需要的朋友可以參考下
    2015-01-01
  • 利用node 判斷打開的是文件 還是 文件夾的實例

    利用node 判斷打開的是文件 還是 文件夾的實例

    今天小編就為大家分享一篇利用node 判斷打開的是文件 還是 文件夾的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-06-06
  • 使用forever管理nodejs應(yīng)用教程

    使用forever管理nodejs應(yīng)用教程

    這篇文章主要介紹了使用forever管理nodejs應(yīng)用教程,本文介紹了forever的安裝、常用命令等,最有用的莫過于文件改動監(jiān)聽并自動重啟了,這可以增加開nodejs應(yīng)用的效率,需要的朋友可以參考下
    2014-06-06
  • 深入理解nodejs中Express的中間件

    深入理解nodejs中Express的中間件

    一個Express應(yīng)用就是在調(diào)用各種中間件。可見中間件在web應(yīng)用開發(fā)中的重要性,有興趣的可以了解一下
    2017-05-05
  • 利用adb shell和node.js實現(xiàn)抖音搶紅包功能(推薦)

    利用adb shell和node.js實現(xiàn)抖音搶紅包功能(推薦)

    這篇文章主要介紹了利用adb shell和node.js實現(xiàn)抖音搶紅包功能,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-02-02

最新評論

林口县| 温州市| 怀远县| 海兴县| 武冈市| 鄂托克前旗| 重庆市| 玉山县| 明溪县| 托里县| 子洲县| 澄江县| 武邑县| 清丰县| 兰州市| 麻江县| 嘉义市| 合水县| 治多县| 武汉市| 阳西县| 阳朔县| 鹿邑县| 莱西市| 广饶县| 霍城县| 湘潭市| 平谷区| 措勤县| 沙雅县| 兴化市| 金阳县| 滦南县| 永泰县| 阳江市| 永寿县| 巴林左旗| 图片| 葫芦岛市| 建始县| 静宁县|