[网络编程] HTTP1.0 vs HTTP1.1 vs HTTP2.0 - Gukie/learning GitHub Wiki

refer

https://juejin.im/entry/5981c5df518825359a2b9476

HTTP1.0 vs HTTP1.1

  • HTTP1.1 支持长连接,它的keep-alive默认是打开的,HTTP1.0不支持
  • HTTP1.1 支持部分加载,而HTTP1.0只能加载整个页面

HTTP2.0 vs HTTP1.x

  • 基于二进制传输的,这样更强壮; 而HTTP1.x是基于文本的,但文本的样式会有多种多样,处理起来会麻烦很多
  • 多路复用; HTTP2.0一个TCP连接上可以处理多个请求的Stream,并且是并行的,各个request都有一个id,服务器可以根据id进行区分进而处理
  • 对Header进行压缩; 因为Header中有很多重复的,对其压缩能减少网络的带宽
  • 基于HTTPS的传输,更安全
  • HTTP2.0支持 服务器推送; 即客户端请求一次,服务器会将客户端需要的资源都返回过去,等客户端使用的时候就不需要再次请求了

HTTP2.0的多路复用跟 HTTP1.x中的长连接的区别

  • HTTP1.0,一个请求一个连接,请求完毕,连接关闭;
  • HTTP1.1,使用pipeline,所有请求都会使用一个单线程去串行处理,然后所有请求都是排队被处理的; 一旦有某个请求被阻塞,后面的请求只能等着
  • HTTP2.0, 请求可以被并行处理,一个请求被阻塞不会影响到其他请求

HTTP2.0多路复用为什么好

TCP连接会随着时间的推移进行自我 "调谐": 连接刚建立起来的时候,会限制传输的最大速度,随着传输成功次数的增加,其传输速率也会跟着提升。这种调谐被称为是TCP的慢启动。

而HTTP请求一般都是突发并且短暂的,这样就无法充分使用TCP的慢启动的特性了,尤其是HTTP1.0;而HTTP2.0让所有的数据流共用一个连接,可以充分使用TCP慢启动,提成HTTP的性能