通常浏览器发送请求时都会带着"Accept-Encoding"字段,例如gzip、deflate、br,服务器从中选择一种算法,然后放入"Content-Encoding",再把压缩后的数据发给浏览器解析。
比如压缩率能到50%,那就是1000K的数据能压缩成500K。nginx如何配置gzip请查看这里
除了压缩体积以外,还可以化整为零,将一个物品分成多个小块。利用服务端返回的响应报头"Transfer-Encoding:chunked"表明数据是分块传输的,这个"Content-Length"和数据长度是相反的。
分块请求是整块整块的获取,视频的快进,断点续传等,都是通过范围请求来实现的,他需要在服务器的响应头中告知客户端"Accept-Ranges:bytes"。客户端请求对应的是Range字段。
整个流程是
GET /16-2 HTTP/1.1 Host: www.lihuanting.com Range: bytes=0-31
416 Requested Range Not Satisfiable //范围不对
HTTP/1.1 206 Partial Content Content-Length: 32 Accept-Ranges: bytes Content-Range: bytes 0-31/96