学习笔记 图解HTTP第3章 HTTP报文内的HTTP信息

177 阅读3分钟

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判断屏幕宽度显示指定页面一样
  • 透明协商,即两边都要判断