HTTP1.0、HTTP1.X、HTTP2.0的区别

766 阅读4分钟

网络协议知识学习

一、HTTP1.0与HTTP1.1的区别

1.1 缓存处理

  在HTTP1.0中主要使用header里的If-Modified-Since, Expires来作为缓存判断的标准, HTTP1.1则引入了更多的缓存控制策略例如Entity tag, If-Unmodified-Since, If-Match, If-None-Match等更多可供选择的缓存头来控制缓存策略.

1.2 带宽优化及网络连接的使用

  HTTP1.0中, 存在一些浪费带宽的现象, 例如客户端只是需要某个对象的一部分, 而服务器却将整个对象送过来, 并且不支持断点续传功能, HTTP1.1则在请求头引入range头域, 它允许只请求资源的某个部分, 即返回码206, 这样就方便了开发者自由选择以便于充分利用带宽和连接.

1.3 错误通知的管理

  在HTTP1.1中新增了24个错误状态响应码

1.4 Host头处理

  在HTTP1.0中认为每台服务器都绑定一个唯一的IP地址, 因此请求消息中的URL并没有传递主机名, 但随着虚拟主机技术的发展, 在一台物理服务器上可以存在多个虚拟主机, 并且它们共享一个IP地址. HTTP1.1的请求消息和响应消息都应支持Host头域, 且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)

1.5 长连接

  HTTP1.1支持长连接和请求的流水线处理, 在一个TCP连接上可以传递多个HTTP请求和响应, 减少了建立和关闭连接的消耗和延迟, 在HTTP1.1中默认开启Connection: keep-alive, 一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点.

二、HTTP2.0与HTTP1.X主要区别

2.1 多路复用

  HTTP2.0使用了(类似epoll)多路复用的技术, 做到同一个连接并发处理多个请求, 而且并发请求的数量比HTTP1.1大了好几个数量级.

  TCP连接有一个预热和保护的过程, 先检查数据是否传送成功, 一旦成功过, 则慢慢加大传输速度, 因此对应瞬时并发的连接, 服务器的响应就会变慢. 所以最好能使用一个建立好的连接, 并且这个连接可以支持瞬时并发的请求.

  HTTP性能优化的关键并不在于高带宽, 而是低延迟, TCP连接会随着时间进行自我调整, 起初会限制连接的最大速度, 如果数据成功传输, 会随着时间的推移提高传输的速度. 这种调谐则被称为TCP慢启动, 由于这种原因, 让原本就具有突发性和短时性的HTTP连接变的十分低效. HTTP2.0通过让所有数据流共用同一个连接, 可以更有效地使用TCP连接, 让高带宽也能真正的服务于HTTP的性能提升.

2.2 数据压缩

  HTTP1.1不支持header数据的压缩, HTTP2.0使用HPACK算法对header的数据进行了压缩, 这样数据体积小了, 在网络上传输就会更快.

2.3 服务器推送

  当对支持HTTP2.0的web server请求数据的时候, 服务器会顺便把一些客户端需要的资源一起推送到客户端, 免得客户端再次创建连接发送请求到服务器获取, 这种方式非常适合加载静态资源.

三、HTTP2.0多路复用与HTTP1.X中的长连接复用有什么区别

  • HTTP1.0: 一次请求-响应, 建立一个连接, 用完关闭, 每一个请求都要建立一个连接.
  • HTTP1.1: Pipeling解决方式为, 若干个请求排队串行化单线程处理, 后面的请求等待前面请求的返回才能获得执行机会, 一旦有某个请求超时等, 后续请求只能被阻塞, 毫无办法, 也就是线头阻塞.
  • HTTP2.0: 多个请求可同时在一个连接上并行执行, 某个请求任务耗时严重, 不会影响到其它连接的正常执行.

四、服务器推送

  服务端推送能把客户端所需要的资源伴随着index.html一起发送到客户端, 省去了客户端重复请求的步骤, 正因为没有发起请求, 建立连接等操作, 所以静态资源通过服务端推送的方式可以极大地提升速度, 具体如下:

4.1 普通的客户端请求过程:

4.2服务端推送的过程: