# 文件传输

# 小文件传输

上传图片、PDF等

# 大文件传输

上传视频或者其他比较大的内容,可以使用数据压缩或者分块传输。

# 数据压缩

可以设置Encoding等相关参数

# 分块传输

在响应头里面设置Transfer-Encoding: chunked,或者Content-Length(两者不能共存),会将数据分成多个块进行传输。

# 分块编码规则

包含长度头和数据块,长度头包含了16进制数字的长度和CRLF的换行, 数据块中包含了数据内容和CRLF,最后一个分块以长度为0的数据作为结束。

# 范围请求

通过范围请求,用户或者浏览器可以只请求资源的一部分,比如视频拖动进度条。服务器在支持范围请求的情况下,需要通过Accept-rang: bytes告诉客户端。客户端请求的时候,通过设置Range:bytes=x-y,请求获取x-y之间的数据。客户端请求的时候,设置多个区间段Range:bytes=x-y,m-n,响应头的MIME为multipart/byteranges表示多个分块数据。