使伺服器支援範圍請求,允許客戶端只請求文件的一部分。其流程是:
客戶端向服務端發起請求
服務端響應,附上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...