数据传输相关问题

Youky ... 2021-10-11 计算机网络
  • 应用层
  • HTTP
About 1 min

# 数据传输相关问题

# 定长数据传输

对于定长数据,可以指定Content-Length指明数据包长度。

  • 指定长度小于实际内容,传送内容会被截断。如果采用了持久连接,截断的内容会附在下一次的报文中,造成bug
  • 指定长度大于实际内容,客户端会一直等待下一字节,然而无法响应,直到超时

# 不定长数据传输

对于不定长数据,设置Transfer-Encoding:chunked。此时:

  • Content-Length的值会被无视
  • 会根据长连接持续推送内容

响应体每个部分前会有一行用16进制数字表示内容长度

# 大文件传输

对于大文件,一次性全部传输显然不现实,需要进行范围请求。

  1. 首先,响应头中需要通过Accept-Ranges字段表明自己支持范围请求。当取值为none时等同于没有该字段(即不支持范围请求)
Accept-Ranges:bytes
1
  1. 客户端通过Range字段表明自己要请求的内容的范围

  2. 服务端根据Range的取值判断请求是否合法

    • 不合法,返回416
    • 合法,返回206 Partial Content。并添加Content-Range字段
Last update: October 16, 2022 21:28
Contributors: youky7 , Youky