3.1 HTTP报文
就是HTTP传输的数据.这个数据有自己的固定格式,不按照这个格式来请求就会发送失败.由以下三部分组成
- 报文首部
- 空行
- 报文主体
3.2 请求报文及响应报文的结构
-
请求报文由以下几部分组成
- 请求行
- 请求方法
- 请求URI
- HTTP版本
- 首部字段
- 空行
- 报文主体
- 请求行
-
响应报文由以下几部分组成
-
响应行
- 响应结果状态骊
- 原因短语
- HTTP版本
-
首部字段
-
空行
-
报文主体
-
首部字段主要有以下几类
- 通用首部
- 请求/响应首部
- 实体首部
3.3 编码提升传输速率
在传输过程中压缩数据,会提升速度,但是会加重服务器负载
3.3.1 报文主体和实体主体的差异
- 报文:是一个单位,HTTP通信中专用的单位
- 1个报文 = 8bit = 1byte
- 也就是说一个报文相当于1byte大小,1024个报文就是1kb
- 实体:请求/响应的载荷数据
- 等于实体首部 + 实体主体
- 通常,报文主体 === 实体主体
- 当传输编码后,报文主体就不等于实体主体了
3.3.2 压缩传递的内容编码
内容编码是用在实体的编码格式,保持实体信息原样压缩,有以下几种
- gzip
- 这个见的最多,感觉每个请求都是这样的啊.....
- compress(UNIX系统的)
- deflate
- identity(不压缩)
3.3.3 分割发送的分块传输编码
- 在HTTP通信过程中,请求的编码实体没有传输完之前,浏览器不无法显示
- 传输大容量数据时,会把数据分割成多块,让浏览器逐步显示
- 图片从上到下慢慢显示就是这个原因
这种把实体主体分块的功能,就叫分块传输编码(Chunked Transfer Coding)
- 第一块会用16进制标记大小
- 最后 一块会使用"0(CR+LF)"来标记
- 由客户端负责解码,并恢复到编码前的实体主体
3.4 发送多种数据的多部分对象集合
通常在上传图片或文件时需要用到,在同一份报文中,有多个类型的实体主体.有如下几种格式
- multipart/form-data(用于表单)
- multipart/byteranges(响应状态206,包含多个范围的内容)
3.5 获取部分内容的范围请求
即在请求时添加首部字段range,指定要资源的哪一部分数据.
服务器如果支持范围返回的话,返回状态码就是3.4中的第2个.否则就是200并且全部返回
3.6 内容协商返回最合适的内容
就是说,显示哪种样子的界面给用户.一般有以下3种类型
- 服务器驱动协商(如nginx,后端代码判断是手机访问,就直接跳转到wap.xxx.com),会根据以下信息判断
- Accept
- Accept-Charset
- Accept-Encoding
- Accept-Language
- Content-Language
- 客户端驱动协商
- 类似于js判断屏幕宽度显示指定页面一样
- 透明协商,即两边都要判断