【图解 HTTP】HTTP报文内的 HTTP 相关信息

文章目录

  • 1. HTTP报文内的 HTTP 信息
    • 1.1 HTTP 报文
    • 1.2 请求报文及响应报文
    • 1.3 编码 —— 用于提升传输速率
      • 1.3.1 报文主体和实体主体的区别
      • 1.3.2 内容编码 —— 用于压缩传输
      • 1.3.3 分块传输编码(Chunked Transfer Coding) —— 用于分割发送
    • 1.4 多部分对象集合(Multipart)—— 用于发送多种数据
    • 1.5 范围请求(Range Request) —— 用于获取部分内容
    • 1.6 内容协商 —— 返回最合适的内容

1. HTTP报文内的 HTTP 信息

本文主要介绍请求及响应的运作过程

1.1 HTTP 报文

1. 定义

用于 HTTP 协议交互的信息叫做报文,请求端的 HTTP 报文叫请求报文,响应端的 HTTP 报文叫响应报文。

2. 报文结构

HTTP 报文由报文首部和报文主体构成,两者由空行划分 (报文主体不是必需的)

【图解 HTTP】HTTP报文内的 HTTP 相关信息_第1张图片

1.2 请求报文及响应报文

请求报文和响应报文组成:

  • 请求行 —— 包含用于请求的方法,请求 UR 及 HTTP 版本
  • 状态行 —— 包含表示响应结果的状态码,原因短语及 HTTP 版本
  • 首部字段 —— 包含表示请求和响应的各种各种条件及属性的各类首部(通用首部、请求首部、响应首部及实体首部)
  • 其他 —— 可能还包含 HTTP 的标准(RFC)里未定义的首部(Cookie 等)

请求报文实例:
【图解 HTTP】HTTP报文内的 HTTP 相关信息_第2张图片
响应报文实例:
【图解 HTTP】HTTP报文内的 HTTP 相关信息_第3张图片

1.3 编码 —— 用于提升传输速率

HTTP 传输数据时可通过编码提升传输速率,通过在传输时编码也可有效地处理大量访问请求

缺点:编码操作会消耗更多的CPU等资源

1.3.1 报文主体和实体主体的区别

  • 报文( message ) —— HTTP 通信基本单位,由8位组(8个比特)字节流组成(octet sequence)
  • 实体( entity ) ——作为请求或响应的有效载荷数据(补充项)被传输,由实体首部和实体主体组成

两者间关系: HTTP报文的主体用于传输请求或响应的实体主体,通常报文主体等于实体主体,只有传输时出现编码操作时,实体主体内容发生变化,使得两者间产生区别

1.3.2 内容编码 —— 用于压缩传输

1. 内容编码: 应用在实体内容上的编码格式,保持实体原样压缩 (客户端负责接收及解码)
2. 常用的内容编码:

gzip (GUN zip)
compress (UNIX 系统的标准压缩)
deflate (zlib)
identify (不进行编码)

1.3.3 分块传输编码(Chunked Transfer Coding) —— 用于分割发送

传输大容量数据时,分块发送,使浏览器逐步显示。这种把实体主体分块的功能叫做分块传输编码。使用分块传输编码的实体主体由接收的客户端负责解码,恢复到编码前的实体主体。
实现

HTTP / 1.1 中存在一种 Transfer Coding 机制,可以在通信时按某种编码方式传输,只定义与分块传输编码

1.4 多部分对象集合(Multipart)—— 用于发送多种数据

1. MIME : 全称 Multipurpose Internet Mail Extensions(多用途因特网邮件扩展)机制,邮件之所以能处理文本、图片、视频等多种不同类型的数据就是因为采用了这种机制标记了数据类型。在 MIME 中使用多部分对象集合(Multipart)的方法来容纳多份不同类型的数据。
2. HTTP && 多部分对象集合(Multipart): HTTP 也采纳了多部分对象集合,一份报文主体内可含有多类型实体,主要使用场景为图片或文本文件上传。
3. 多部分对象集合包含的对象:

  • multipart/form-data —— Web 表单文件上传使用

【图解 HTTP】HTTP报文内的 HTTP 相关信息_第4张图片

  • multipart/byteranges —— 状态码 206 (Partical Content)响应报文包含了多个范围的内容时使用

使用 boundary 字符串划分多部分对象集合指明的各类实体。各个实体的起始行前加入“- - ”标记,在多部分对象集合对象的字符串的最后插入 “- - ”标记作为结束。

【图解 HTTP】HTTP报文内的 HTTP 相关信息_第5张图片
HTTP 报文使用多部分对象集合时,需要在首部字段加入 Contene-type 字段
4. 多部分对象集合的使用: 多部分对象集合的每个部分类型种都可以含有首部字段,还可以在某个部分种嵌套多部分集合,具体内容参考 RFC2046

1.5 范围请求(Range Request) —— 用于获取部分内容

范围请求指需要指定 下载的实体范围 的请求,其可作为下载过程中遇到网络中断的处理机制。

【图解 HTTP】HTTP报文内的 HTTP 相关信息_第6张图片
1. byte范围指定格式:

  • 5001 ~ 10000 字节
Range : bytes= 5001-10000
  • 5001 ~ * (5001 之后的字节)
Range : bytes= 5001-
  • 多重范围:从开始到3000字节 + 从 5000~7000字节
Range : bytes=-3000,5000-7000

2. 范围请求返回报文状态码: 206 —— Partial Content
对于多重范围的范围请求,在首部字段 Content-Type 表明 mutipart / byteranges

1.6 内容协商 —— 返回最合适的内容

内容协商指客户端和服务器端就响应的资源内容进行交涉,然后提供给客户最为合适的资源,其以响应资源的语言、字符集、编码方式作为判断的基准。

1. 小实例: 访问相同 URI 的 Web 页面,会根据浏览器的默认语言显示中文还是英文
2. 内容协商判断基准—— 包含在请求报文中的某些首部字段:

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

3. 内容协商类型

(1) 服务器驱动协商
由服务器参考浏览器发出请求的首部字段,在服务器端自动处理。对用户来说,以浏览器发送的信息作为内容协商的依据,不一定是最优的。
(2) 客户端驱动协商
用户从浏览器显示的选项列表中手动选择
(3) 透明协商
前两者的结合体

尾注:今天就不碎碎念废话了,如有疑问,欢迎与我交流,为在成长中的你加油!!!

你可能感兴趣的:(计算机网络,http,网络,网络协议)