nodejs實現範圍請求

2021-08-26 08:50:24 字數 1765 閱讀 5041

使伺服器支援範圍請求,允許客戶端只請求文件的一部分。其流程是:

客戶端向服務端發起請求

服務端響應,附上accept-ranges頭(值表示表示範圍的單位,通常是「bytes」),告訴客戶端其接受範圍請求

客戶端傳送新的請求,附上ranges頭,告訴服務端請求的是乙個範圍

服務端收到範圍請求,分情況響應:

請求中的ranges頭格式為(這裡不考慮多範圍請求了):

ranges: bytes=[start]-[end]
其中 start 和 end 並不是必須同時具有:

如果 end 省略,伺服器應返回從 start 位置開始之後的所有位元組

如果 start 省略,end 值指的就是伺服器該返回最後多少個位元組

如果均未省略,則伺服器返回 start 和 end 之間的位元組

響應中的content-range頭有兩種格式:

當範圍有效返回 206 時:

content-range: bytes (start)-(end)/(total)

當範圍無效返回 416 時:

content-range: bytes */(total)

//**實現

res.setheader('content-range', `bytes */$`);

新增函式處理範圍請求:

【注意】這裡吧不合理的範圍請求直接設定為返回全部,如果想設定範圍錯誤就直接不返回可以設定http狀態碼為416

/**

* 範圍請求

* 不在合理的範圍內就直接返回所有

* 在合理規範的範圍內就按照返回對應的部分

* @param totlesize 總的範圍

* @param req

* @param res

*/module.exports = (totlesize, req, res) => ;

}const sizes = range.match(/bytes=(\d*)-(\d*)/);

const end = sizes[2] || totlesize - 1;

const start = sizes[1] || totlesize - end;

//不規範的範圍,是要直接一起返回,所以設定狀態碼200

if(start > end || start < 0 || end > totlesize) ;

}res.setheader('accept-ranges', 'bytes');

res.setheader('content_range', `bytes $-$/$`);

res.setheader('content_length', end-start);

return ;

};

範圍讀取:

let rs;

const = range(stats.size, req, res);

if (code === 200) else 表示檔案讀取的起始點和終點

rs = fs.createreadstream(filepath, );

}//有這個pipe就不需要再去呼叫end了,這樣直接呼叫end會導致res接受不到東西,因為pipe是非同步的

rs.pipe(res);

nodejs實現同步http請求

nodejs實現同步http模組請求。用到http模組。在命令列呼叫node命令執行,可以這樣使用 let http require http 引入http模組 let co require co http模組傳送請求 param host param port param route param ...

nodejs實現簡單的表單請求

本文實現的內容是將html表單中的資料原封不動的發回去 具體操作流程,在瀏覽器中輸入訪問此檔案,之所以能這樣訪問,是因為node指令碼中對外開放了這種使用方法,具體的過程是node後台監聽3000port,此時瀏覽器輸入上述url,後台接收到有人訪問,然後按照路徑找到client.html,將此檔案...

http範圍請求

http 1.1之後才支援,需要雙端都支援 服務端頭資訊中有 accept ranges bytes 表明伺服器支援範圍請求 範圍請求 http code 返回 206 partial content 客戶端請求頭 content range bytes 0 1408774 1408775 star...