图解HTTP-读书分享三

97次阅读

共计 1478 个字符,预计需要花费 4 分钟才能阅读完成。


第三章:HTTP 报文内的 HTTP 信息

3.1 HTTP 报文

  • HTTP 通信过程包括从客户端发往服务器端的请求,以及从服务器端返回客户端的响应
  • 用户 HTTP 协议交互的信息 称为 HTTP 报文,实质是多行数据组成的字符串文本
  • 请求端 (客户端) 的 HTTP 报文 称为 请求报文
  • 响应端 (服务器端) 的 HTTP 报文 称为 响应报文
  • HTTP 报文 主要分为 报文首部、报文主体

3.2 请求报文及响应报文的结构

  • 请求报文和响应报文的首部内容有如下构成:
  • 请求行:包含用于请求的方法,请求 URI 和 HTTP 版本
  • 状态行:包含表明响应结果的状态码,原因短语和 HTTP 版本
  • 首部字段:包含表示和响应的各种条件和属性的各类首部,一般有 4 种首部,通用首部、请求首部、响应首部、实体首部
  • 其他:可能包含 HTTP 的 RFC 里未定义的首部(cookie 等)

3.3 编码提升传输速率

3.3.1 报文主体与实体主体的差别
  • 报文:是 HTTP 通信协议的基本单位,由 8 位组字节流组成,通过 HTTP 通信传输
  • 实体:作为请求和响应的有效载荷数据被传输,其内容由实体首部和实体主体组成
  • 通常,报文主体 等于 实体主体,HTTP 报文主体用于传输请求或响应的实体主体。只有当传输中进行了编码操作,实体主体内容发生改变,才导致他和报文主体产生差异
3.3.2 压缩传输 的内容编码
  • 作用:HTTP 的内容编码,类似于对文本 zip 压缩的功能
  • 内容编码指明应用在实体内容上的编码格式,并保持实体信息原样压缩,内容编码后的实体由客户端接收并负责解码
  • 常见的编码格式:
  • gzip(Gun zip)
  • compress(Unix 系统标准格式)
  • deflate(zlib)
  • identity(不进行编码)
3.3.3 分割发送 的分块传输编码
  • 场景:在 HTTP 通信中,请求的编码实体资源尚未全部传输完成之前,浏览器无法显示请求页面
  • 分块传输编码:把实体主体分块的功能

3.4 发送多种数据的多部分对象集合

  • 场景:类似于发送邮件时,附件中可添加文本、视频、音频、照片等多种数据
  • HTTP 协议也采取了 多部分对象集合,发送的一份报文主体中可含有多类型的实体,通常用在图片和文本上传时
  • 多部分对象集合 包含的对象如下:
  • multipart/form-data 用户 web 表单上传
  • multipart/byterange 状态码 206,响应报文包含了多个范围的内容时使用
  • HTTP 报文使用多部分对象结合,需要在首部字段加上Content-type

3.5 获取部分内容的 范围请求

  • 场景:网速不好或图片过大情况下,下载图片时网络中断,为了避免再次从头开始下载,需要能从之前下载中断处恢复下载功能
  • 范围请求:指定范围发送的请求
  • 例子: 比如一份 10000 字节大小的资源,使用范围请求,可以只请求 5001-10000 子节的资源
  • 执行范围查找时,会使用首部字段 Range 来指定资源的 byte 范围
  • 针对返回查找,响应会返回状态码 206 Partial Content 的响应报文

3.6 内容协商 返回最合适的内容

  • 例子:比如同一个网站可能有多份相同的静态页面(中文版、英文版),当浏览器默认语言是中文,则返回中文页面;是英文,则返回英文页面
  • 概念:内容协商机制 是指客户端和服务器端 就响应的资源内容进行交涉,然后提供给客户端最合适的资源。
  • 内容协商会以响应资源的语言、字符集、编码方式等作为判断标准
  • 包含在请求报文中的某些首部字段 可以作为判断标准
  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language
  • 内容协商技术 分为三个类型
  • 服务器驱动协商:在服务器端自动处理
  • 客户端驱动协商:比如 js 自动切换 PC 或手机版
  • 透明协商:二者结合
正文完
 0