如何在有限的带宽下高效快捷地传输这些大文件?
数据压缩, 把大文件变小
启动压缩算法,来提升传输效率。
涉及请求头:
- Accept-Encoding
- Content-Encoding
分块传输,化整为零
报文中内容分多次,分成许多块,逐个发送。有点类似乐高。
涉及请求头:
- Tranfer-Encoding: chunked
分块传输具体的规则:
1.每个分块包含两个部分,长度头和数据块;
2.长度头以CRLF结束的一行明文,16进制数据表示;
3.数据块紧跟在长度后面,最后已CRLF结束,但数据不包含CRLF;
4.最后用一个长度为0的块标识结束;
范围请求
相当于客户端的“化整为零”,服务端响应报文携带该头,表明支持范围请求的。
如果服务端不支持,那只能老老实实的收发整块文件了。
涉及请求头:
- 响应头:Accept-Ranges:bytes
- 请求头:Range: bytes=x-y
x:起点 - y:终点
0-: 0 至 最后;
10-: 10 至 最后;
-1: 文档最后一个字节;
-10: 文档最后10个字节;
服务器收到Range后,处理步骤:
- 检查返回合法性,如果文件只有100字节,请求Range为200-300,越界返回416,客户端检查;
- 根据Range计算偏移量,返回206,表示body是原数据的一部分;
- 服务器报文实体头增加“Content-Range”,告诉客户端该片段的实际偏移量,格式是 "
bytes x-y/length";- 发送请求。
多段数据
上述是一次获取一个片段数据。
涉及请求头:
- MIME: multipart/byteranges; boundary=xxxx
- Range:x-y, j-k
请求实例wireShark抓包