Http 1.0 1.1 2.0 3.0 版本差别

Http 1.0

发布年份:1996 非官方标准

  • 短链接:每一次请求都对应一次TCP的连接与释放

    • 开销大:每次请求都要TCP的连接与释放
    • 队头阻塞:每次请求都必须等上一次请求获得响应之后,才可以发送;效率低下
  • 缓存:在HTTP1.0中主要使用header里的协商缓存 last-modified(上次修改时间),if-modified-since(是否修改),强缓存 Expires(缓存过期时间);减少了不必要的网络传输

Http 1.1

发布年份:1997 官方标准,并长期使用

  • 长连接:HTTP1.1增加Connection字段,通过设置Keep-Alive保持HTTP连接不断开。避免每次客户端与服务器请求都要重复建立释放建立TCP连接。提高了网络的利用率。

如果客户端想关闭HTTP连接,可以在请求头中携带Connection:false来告知服务器关闭请求。

  • 管道化(pipelining):HTTP1.1支持请求管道化(pipelining)。TCP连接之后,Http可以像流水线一样,连续发送多次请求,而不必等待上一次请求响应之后再发送

需要注意的是:服务器必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户端能够区分出每次请求的响应内容。也就是说,HTTP管道化可以让我们把先进先出队列从客户端(请求队列)迁移到服务端(响应队列)。
可见,HTTP1.1还是无法解决队头阻塞的问题。同时“管道化”技术存在各种各样的问题,所以很多浏览器要么根本不支持它,要么直接默认关闭,并且开启的条件很苛刻……而且好像实际也没有什么用处。

由此可见,管线化并不是真正的并行的传输,现阶段的浏览器厂商采取了另外一种做法,它允许我们打开多个TCP的会话。eg.Chrome一般是6个

  • 缓存:加入了一些新的字段如cache-control,支持断点传输
  • Host 标头:使得一个服务器能够用来创建多个Web站点

Http 2.0

发布年份:2015 官方标准,逐渐普及中

  • 头部压缩: HTTP2.0会压缩(Header)部分;如果同时多个请求其头部一样或相似,那么协议会消除重复部分。

利用HPAK算法:在客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,就不用重复发送同样字段了,只发送索引号,减少数据量提高速度

  • 二进制格式: HTTP/1.0和HTTP/1.1中,报文都是纯文本的格式简单易读;而在2.0中采用了二进制的格式,不再可读;数据以数据流(stream)的形式以字节单位发送,数据包可以不按顺序发送

  • 多路复用协议: 真正的并行的请求能在同一个链接中处理,移除了 HTTP/1.x 中顺序和阻塞的约束。
    Http 1.0 1.1 2.0 3.0 版本差别_第1张图片

在HTTP2.0中,对头阻塞是发生在TCP层面

  • 服务端推送: 服务端不再是被动地响应,可以主动向客户端发送消息、推送额外的资源。

在实际中应用的也比较少

Http 3.0

发布年份:2022 官方文档 逐渐普及中

  • QUIC协议: 而QUIC是基于 UDP 协议,不需要三次连接进行握手,而且也会缩短 TLS 建立连接的时间。解决了队头阻塞问题。

Http 1.0 1.1 2.0 3.0 版本差别_第2张图片

参考资料

  • https://blog.csdn.net/weixin_45910068/article/details/126290248
  • https://xiaolincoding.com/network/2_http/http_interview.html#http-1-1%E3%80%81http-2%E3%80%81http-3-%E6%BC%94%E5%8F%98
  • https://zhuanlan.zhihu.com/p/266578819
  • https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

你可能感兴趣的:(计算机网络,TCP,HTTP,计算机网络)