http1.0
1支持多种文本传输,2状态码,3catch,4引入请求头和响应头(不过 HTTP/0.9 在建立好连接之后,只会发送类似GET /index.html的简单请求命令,并没有其他途径告诉服务器更多的信息,如文件编码、文件类型等。同样,服务器是直接返回数据给浏览器的,也没有其他途径告诉浏览器更多的关于服务器返回的文件信息。)
http1.0只能进行短连接。因为一次tcp连接要进行三次握手和四次挥手,所以很容易造成线程阻塞
http 1.1
1持久链接(特点是在一个 TCP 连接上可以传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直保持,且最多支持6个tcp链接)。
2还引入了客户端 Cookie 机制
3使用管线化技术提升效率(不过由于各种原因,管线化技术最终被各大厂商放弃了) 队头阻塞:持久连接虽然能减少 TCP 的建立和断开次数,但是它需要等待前面的请求返回之后,才能进行下一次请求。如果 TCP 通道中的某个请求因为某些原因没有及时返回,那么就会阻塞后面的所有请求,这就是著名的队头阻塞的问题。
http1.1存在的问题: HTTP/1.1 对带宽的利用率不理想,是因为 HTTP/1.1 很难将带宽用满。比如我们常说的 100M 带宽,实际的下载速度能达到 12.5M/S,而采用 HTTP/1.1 时,也许在加载页面资源时最大只能使用到 2.5M/S,很难将 12.5M 全部用满。
之所以会出现这个问题,主要是由以下三个原因导致的。
第一个原因,TCP 的慢启动。
第二个原因,同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽。
第三个原因,HTTP/1.1 队头阻塞的问题。
http2
HTTP/2 的解决方案可以总结为:一个域名只使用一个 TCP 长连接和消除队头阻塞问题
http2.0:的多路复用(另外可以设置优先级,可以头部压缩) 一个域名只使用一个 TCP 长连接来传输数据
增加了请求和相应的头域,增加head和post方法,传输对象局限于html文本,也支持长连接
http3
解决队头阻塞(tcp级别)
HTTP跑在QUIC(基于UDP)上而不是TCP上。而这个“HTTP over QUIC”就是HTTP协议的下一个大版本,HTTP/3。它在HTTP/2的基础上又实现了质的飞跃,真正“完美”地解决了“队头阻塞”问题。
总结
http1.1:主要就是增加了持久链接,一个域名下可以有6个tcp
http2:主要就是解决带宽利用率不高的问题,只有一个tcp链接(但是也出了新的问题:tcp丢包导致队头阻塞,进行重传 ),再一个就是解决了队头阻塞问题