报文: 用于HTTP协议交互的信息称之为报文。它是由多行数据构成的字符串文本。
请求报文: 客户端的HTTP报文。
响应报文: 服务器端的HTTP报文。
请求报文&响应报文
报文结构
请求报文:
响应报文:
概念阐述
- 请求行:包含请求的方法,用于请求URI和HTTP版本。
- 状态行:包含表明响应结果的状态码、原因短句、HTTP版本。
- 首部字段:包含表示请求和响应的各种条件和属性的各类首部。
- 一般有各种首部:通用首部、请求首部、响应首部、实体首部。
编码
HTTP有两种传输数据的方式:
- 按照数据原貌直接传输
- 效率慢
- 传输过程中通过编码提高效率
- 效率高
- 但是会消耗更多的CPU资源
报文主体&实体主体
报文:
HTTP通信的基本单位,由8位组字节流组成,通过HTTP通信传输。
实体:
作为请求或响应的有效载荷数据被传输。内容由实体首部和实体主体构成。
HTTP报文主体:用于传输请求或者响应的实体主体。
📎 一般来说 报文主体 == 实体主体 。但是当传输过程中进行编码操作时,实体主体的内容发生变化,会导致和报文主体产生差异。
内容编码
指明应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接收并负责解码。
常见编码格式:
- gzip
- compress
- deflate
- identity
分块传输编码
在传输大的数据时,通过把数据分成多块,让浏览器逐步显示页面
步骤:
- 将实体主体分为多个部分,每一块用16进制标记块的大小。最后一块用
0(CR+LF)
来标记。 - 客户端负责解码,恢复到编码前的实体主体。
多部分对象集合
可以发送多种数据:
-
multipart/form-data: 用于表单文件上传。
-
multipart/byteranges: 响应报文包含了多个范围的内容时使用。
步骤:
- 报文中使用多部分对象集合时,要在首部字段加上Content-type,
- 使用boundary字符串划分多部分对象集合指明的各类实体。
获取部分内容的范围请求
要实现该场景需要指定下载的实体范围。
范围请求: 指定范围发送的请求
执行范围请求时,用到首部字段Range指定资源的byte范围。