Nginx的slice模塊可以將一個請求分解成多個子請求,每個子請求返回響應內容的一個片段,讓大文件的緩存更有效率。
HTTP Range請求
HTTP客戶端下載文件時,如果發生了網絡中斷,必須重新向服務器發起HTTP請求,這時客戶端已經有了文件的一部分,只需要請求剩余的內容,而不需要傳輸整個文件,Range請求就可以用來處理這種問題。
如果HTTP請求的頭部有Range字段,如下面所示:
Range: bytes=9437184-16165716
表示客戶端請求文件的第9437184到第16165716個字節,這時服務器只會響應文件的這部分內容,響應的狀態碼為206,表示返回的是響應的一部分。如果服務器不支持Range請求,仍然會返回整個文件,這時狀態碼仍是200。
如果沒有slice的話,可能服務器需要讓14773740這么多字節全部緩沖完之后再統一返回給客戶端/瀏覽器,比如這段:
192.168.40.72 - - [27/Dec/2021:18:25:33 +0800] "GET /e61bfa1a48a4764b6a653568aff6aff.mp4 HTTP/1.1" 206 14773740 "http://192.168.32.98/e61bfa1a48a4764b6a653568aff6aff