HTTP1.0、HTTP1.1、HTTP2.0 、HTTP3
HTTP简述
1、HTTP的发明是为了将超文本标记语言(HTML)文档传送到客户端的浏览器; 2、到了WEB2.0,页面开始变得复杂,页面上具有CSS和JavaScript来丰富页面展示,Ajax的出现,我们拥有了一种新的方式来获取服务器端的方法。上述放都是基于HTTP协议。 3、手机端的出现,页面变的越发复杂。人们开始对其进行优化。
HTTP1.0、HTTP2.0和HTTP3.0的区别
1、HTTP1.0和HTTP1.1的区别
1.1长连接
在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭的延迟;HTTP1.1默认开启长连接(keep-alive),弥补了上版本每次请求都要创建头的缺陷。
1.2节约宽带
HTTP1.0在接收到请求的时候会将整个对象发送过来,并不支持断点续传功能; HTTP1.1支持只发送header信息,用户先将头部信息发送给服务器,如果客户端认为用户有访问权限就会将100发回给用户。用户再将body信息发送给客户端。如果返回401,就终止。
1.3Host域
HTTP1.0不存在域,在HTTP1.0 中认为每一个服务器都有一个唯一的IP地址,所以传送的信息并没有主机的名字(hostname)。在HTTP1.1 的请求消息和响应消息都支持host域,且如果请求消息中没有host域会返回400 bad reques。
1.4缓存处理和错误通知管理
HTTP1.1比HTTP1.0有更多的缓存策略。HTTP1.1中新增了24个错误状态相应码。
2、HTTP1.1和HTTP2.0的区别
HTTP2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。HTTP /1 的请求和响应报文,都是由起始行,首部和实体正文(可选)组成,各部分之间以文本换行符分隔。HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。
2.1多路复用
可以做到一个连接并发处理多个请求,并且并发数量比HTTP1.0高出好几个数量级。
2.2头部数据压缩
HTTP由三部分组成:状态行、请求/响应头部、消息主体。 HTTP只对消息主体进行压缩。状态行和请求都以纯文本的方式进行发送。 随着页面请求的变多header信息也开始占用大量资源。特别是useragent和Cookie这类不会频繁变动的内容。HTTP2.0使用HPACK算法对header进行压缩。
2.3服务器推送
服务端推送是一种在客户端请求之前发送数据的机制。网页使用了许多资源:HTML、样式表、脚本、图片等等。在HTTP1.1中这些资源每一个都必须明确地请求。这是一个很慢的过程。浏览器从获取HTML开始,然后在它解析和评估页面的时候,增量地获取更多的资源。因为服务器必须等待浏览器做每一个请求,网络经常是空闲的和未充分使用的。
为了改善延迟,HTTP2.0引入了server push,它允许服务端推送资源给浏览器,在浏览器明确地请求之前,免得客户端再次创建连接发送请求到服务器端获取。这样客户端可以直接从本地加载这些资源,不用再通过网络。
3、HTTP3.0和HTTP2.0的区别
一个基于 UDP 协议的 QUIC 协议,并且使用在了 HTTP/3 上,HTTP/3 之前名为 HTTP-over-QUIC, 简单来说就是缓存当前会话的上下文,类似于TCP快速打开技术。
3.10RTT 建连可以说是 QUIC 相比 HTTP2 最大的性能优势
1、传输层0RTT就能建立连接 2、加密层0RTT就能建立加密连接 TLS的 ”zero roundtrip” 仅指的是 TLS握手过程:为了能够交换TLS数据,客户端和服务器仍然需要首先建立TCP连接。 另外,QUIC更近一步可以允许客户机在连接的第一个往返过程中发送applicationdata,不需涉及到其他的handshake。 毕竟,QUIC通过将connection’shandshake和cryptographic graphic合拼为一个handshake,已经缩短了典型连接握手的完整往返行程。在此减少了握手的额外roundtrip,QUIC即可建立实际的 0-RTT连接
3.2多路复用
HTTP2虽然支持多路复用,但是HTTP协议中始终没有这个功能,QUIC原生就实现了这个功能,并且单个数据流可以保证有序交付且不会影响到其他数据流。 同HTTP2.0一样,同一条 QUIC连接上可以创建多个stream,来发送多个HTTP请求,但是,QUIC是基于UDP的,一个连接上的多个stream之间没有依赖。比如下图中stream2丢了一个UDP包,不会影响后面跟着 Stream3 和 Stream4,不存在 TCP 队头阻塞。虽然stream2的那个包需要重新传,但是stream3、stream4的包无需等待,就可以发给用户。 另外QUIC 在移动端的表现也会比 TCP 好。因为 TCP 是基于 IP 和端口去识别连接的,这种方式在多变的移动端网络环境下是很脆弱的。但是 QUIC 是通过 ID 的方式去识别一个连接,不管你网络环境如何变化,只要 ID 不变,就能迅速重连上。
3.3加密认证报文
TCP协议知识加密了body并没有对head进行加密,这很容易导致中间网络设备被篡改、注入、监听。 但是 QUIC 的 packet 可以说是武装到了牙齿。除了个别报文比如 PUBLIC_RESET 和 CHLO,所有报文头部都是经过认证的,报文 Body 都是经过加密的。
3.4 向前纠错机制
QUIC协议有一个非常独特的特性,称为向前纠错 (Forward Error Correction,FEC),每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通过其他包的冗余数据直接组装而无需重传。向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传,因为数据重传将会消耗更多的时间(包括确认数据包丢失、请求重传、等待新数据包等步骤的时间消耗)。
总结
HTTP1.x 有连接无法重复使用、队头堵塞、协议开销大和安全因素等诸多缺陷(TCP)。 HTTP2 通过二进制流、多路复用、header压缩等技术大大提高了性能(TCP)。 HTTP3是基于UDP实现的,该协议基于UDP又吸取了TCP的精华,实现了快又可靠的协议。
参考
原文链接:https://blog.csdn.net/ailunlee/article/details/97831912 原文链接:https://baijiahao.baidu.com/s?id=1627163778419611487&wfr=spider&for=pc 原文链接:https://blog.csdn.net/vn9PLgZvnPs1522s82g/article/details/103692405
|