3.1 HTTP报文

客户端的HTTP报文叫做请求报文,响应端的叫做响应报文,由多行(CR+LF作换行符)数据构成的字符串文本构成,分为首部和主体两块
截屏2020-09-06 下午6.18.40.png

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

截屏2020-10-18 上午12.47.56.png
首部:

  • 请求行:请求URI和HTTP版本
  • 状态行:状态码、原因短语、HTTP版本
  • 首部字段
  • 其他

    3.3 编码提升传输速率

    HTTP协议中有一种被称为内容编码的功能,保持实体信息原样压缩,实体由客户端接收并负责解码
    截屏2020-09-06 下午7.17.41.png
    HTTP在传输大容量数据时,通过把数据分割成多块,叫做分块传输编码。。

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

    发送邮件时,可以在邮件中写入文字并添加多份附件,这是因为采用了MIME(多用途因特网邮件扩展)可以语序文本、图片、视频多种类型的数据传输。
    相应的,在HTTP中也才采纳了多部分对象集合,发送的一份报文主 体内可含有多类型实体。通常是在图片或文本文件等上传时使用。

  • multipart/form-data

在 Web 表单文件上传时使用。

  • multipart/byteranges

状态码 206(Partial Content,部分内容)响应报文包含了多个范围的内容时使用。请求部分范围的数据。
使用多部分对象集合时,要在首部加上Content-type
使用 boundary 字符串来划分多部分对象集合指明的各类实体。在boundary 字符串指定的各个实体的起始行之前插入“—”标记(例如:- -AaB03x、—THIS_STRING_SEPARATES),而在多部分对象集合对 应的字符串的最后插入“—”标记(例如:—AaB03x—、— THIS_STRING_SEPARATES—)作为结束。如下:
截屏2020-09-06 下午7.32.36.png
截屏2020-09-06 下午7.32.44.png

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

如何做到在之前下载中断处恢复下载,需要使用 范围请求 (Range Request)
对一份 10000 字节大小的资源,如果使用范围请求,可以只请求5001~10000字节内的资源。
截屏2020-09-06 下午7.35.07.png
执行范围请求时,用首部字段Range来指定资源的byte范围
截屏2020-09-06 下午7.36.18.png
针对范围请求,响应会返回状态码为 206 Partial Content 的响应报 文。另外,对于多重范围的范围请求,响应会在首部字段 Content- Type 标明 multipart/byteranges 后返回响应报文。
如果服务器端无法响应范围请求,则会返回200 OK和完整的实体内容

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

访问相同URI会出现英文版和中文版的web界面,这种机制叫做内容协商(Content Negotiation),指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户端最为适合的资源,它把以下首部字段当作判断的基准:

  • Accept
  • Accept-Charset
  • Accept-Encoding
  • Accept-Language
  • Content-Language

内容协商技术有以下3个类型:

  • Server-driven Negotiation:服务端以请求的首部字段为参考,在服务器自动处理
  • Agent-driven Negotiation:用户从浏览器现实的可选项列表选择,自行切换类型
  • Transparent Negotiation(透明协商):两者的结合体