【协议】http协议1/2的区别

http 协议属于应用层的协议,是我们日常经常打交道的一种协议,属于一种文本协议,http 协议经历了 3 个比较大的版本改变。

http 协议基于 tcp 协议实现(应用层协议基于传输层协议,这个是正常的嘛),为了数据的安全性,有时候可能建立在 tls 或者 ssl 协议之上。

http1.0

http1.0 使用的是非持久化连接,就是每次请求,都是一个新的连接,网络 io 较高

  • 非持久化连接

  • 每次请求都是一个独立的连接

http1.1

http1.1 提供了 Keep-Alive 的参数来设置持久化连接,并且一个连接可以进行多次请求(一个页面加载的时候,css、js 等请求可以在同一个连接下完成),无须重新建立连接,降低了网络 io。并且还允许客户端不用等待上一次请求结果返回,就可以发出下一次请求(但服务器端必须按照接收到客户端请求的先后顺序依次回送响应结果,以保证客户端能够区分出每次请求的响应内容,这样也显著地减少了整个下载过程所需要的时间)。http1.1 开始允许设置 host 请求头字段(使得 web 浏览器可以通过发送 host 来明确服务器要请求的是哪个站点项目),还提供了身份认证,Cache 管理等请求头字段

  • 持久化连接(Keep-Alive)

  • 每个连接可以接受多个请求(但是必须按照请求顺序返回内容)

  • 设置了 host、cache、身份认证等请求头字段

http2.0

这是一个质的改变,由文本协议转变程了二进制协议,并且必须建立在 tls 或者 ssl 之上。

二进制协议相对比文本协议来说,更加简洁,传输的成本降低了(带宽),对计算器更加友好,并且更加安全

  • 二进制协议

  • 必须建立在 tls 或者 ssl 之上

  • IO 多路复用

  • 请求划分优先级

  • 用 HPACK 算法对请求头信息进行了压缩

  • 服务端主动推送消息到客户端