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