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