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