数据传输相关问题
Youky ... 2021-10-11 About 1 min
# 数据传输相关问题
# 定长数据传输
对于定长数据,可以指定Content-Length
指明数据包长度。
- 指定长度小于实际内容,传送内容会被截断。如果采用了持久连接,截断的内容会附在下一次的报文中,造成bug
- 指定长度大于实际内容,客户端会一直等待下一字节,然而无法响应,直到超时
# 不定长数据传输
对于不定长数据,设置Transfer-Encoding:chunked
。此时:
Content-Length
的值会被无视- 会根据长连接持续推送内容
响应体每个部分前会有一行用16进制数字表示内容长度
# 大文件传输
对于大文件,一次性全部传输显然不现实,需要进行范围请求。
- 首先,响应头中需要通过
Accept-Ranges
字段表明自己支持范围请求。当取值为none
时等同于没有该字段(即不支持范围请求)
Accept-Ranges:bytes
1
客户端通过
Range
字段表明自己要请求的内容的范围服务端根据
Range
的取值判断请求是否合法- 若不合法,返回416
- 若合法,返回206 Partial Content。并添加
Content-Range
字段