HTTP/1.1

2. HTTP 基础知识 - 图1

HTTP/2

2. HTTP 基础知识 - 图2
由于 HTTPS 已经在安全方面做的非常好了,所以 HTTP/2 的唯一目标就是改进性能。
因为必须要保持功能上的兼容,所以 HTTP/2 把 HTTP 分解成了语义和语法两个部分:
语义层不做改动,与 HTTP/1 完全一致(即 RFC7231)。
比如请求方法、URI、状态码、头字段等概念都保留不变,这样就消除了再学习的成本,基于 HTTP 的上层应用也不需要做任何修改,可以无缝转换到 HTTP/2。
与 HTTPS 不同,HTTP/2 没有在 URI 里引入新的协议名,仍然用http表示明文协议,用https表示加密协议。
HTTP/1 里可以用头字段Content-Encoding指定 Body 的编码方式,比如用 gzip 压缩来节约带宽,但报文的另一个组成部分——Header 却被无视了,没有针对它的优化手段。
由于报文 Header 一般会携带User Agent、Cookie、Accept、Server等许多固定的头字段,多达几百字节甚至上千字节,但 Body 却经常只有几十字节(比如 GET 请求、204/301/304 响应)
成千上万的请求响应报文里有很多字段值都是重复的,非常浪费,长尾效应导致大量带宽消耗在了这些冗余度极高的数据上。
HTTP/2 把头部压缩作为性能改进的一个重点,优化的方式就是压缩。
HTTP/2 并没有使用传统的压缩算法,而是开发了专门的“HPACK”算法,在客户端和服务器两端建立“字典”,用索引号表示重复的字符串,还釆用哈夫曼编码来压缩整数和字符串,可以达到 50%~90% 的高压缩率。

HTTP/2 的优缺点

  • HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能;
  • HTTP 是可靠传输协议,基于 TCP/IP 协议“尽量”保证数据的送达;
  • HTTP 是应用层协议,比 FTP、SSH 等更通用功能更多,能够传输任意数据;
  • HTTP 使用了请求 - 应答模式,客户端主动发起请求,服务器被动回复请求;
  • HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。

    HTTP/3

    2. HTTP 基础知识 - 图3

    HTTP/3 的优缺点

  • HTTP 最大的优点是简单、灵活和易于扩展;

  • HTTP 拥有成熟的软硬件环境,应用的非常广泛,是互联网的基础设施;
  • HTTP 是无状态的,可以轻松实现集群化,扩展性能,但有时也需要用 Cookie 技术来实现“有状态”;
  • HTTP 是明文传输,数据完全肉眼可见,能够方便地研究分析,但也容易被窃听;
  • HTTP 是不安全的,无法验证通信双方的身份,也不能判断报文是否被篡改;
  • HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间。