1.你对HTTP1.0/1.1,HTTP2.0,HTPP3.0有什么了解?
答:HTTP1.0:
①属于无连接式,每次发送HTTP请求都需要建立TCP连接。
②会造成发送时的对头阻塞,当上一个请求没有应答,当前的请求就会被阻塞。
③在HTTP1.0中主要使用header里的协商缓存 last-modified\if-modified-since,强缓存 Expires来做为缓存判断的标准。Expires明确了浏览器缓存当前URL或网址的时间。
HTTP1.1:
①常连接,不用每次发送HTTP请求都建立TCP连接。
②支持管道网络传输,只要第一个请求发出去了,不必等其回来,就可以发第二个请求出去,可以减少整体的响应时间。
HTTP2.0:
①头部压缩,利用HPAK算法,维护一张表,将字段放入表中,返回索引,不用重复发送相同的字段。
②采用了二进制格式,先前HTTP1.0使用字符等数据占用空间大,还需要将数据转换为二进制格式,现在一步到位。
③HTTP2.0实现了真正的并行传输,大大节约时间成本。
④服务器会主动推送消息不再是被动。例如,客户端接收到了服务端发送的HTML文件,但是后续还需要css文件进行渲染,服务端就会主动发送css文件,不用客户端再次发送请求。
⑤还是会有由TCP导致的队头阻塞,同一个Stream的数据,在HTTP2.0中可以乱序发送,再由Streamid信息组装,但是如果其中一个片段丢失,就会导致后续的HTTP请求阻塞住,因为滑动窗口不会移动直到再次将丢失数据快重传。
https://i-blog.csdnimg.cn/blog_migrate/11d21a2544a9c9adfb4a9409e4f53cf4.png" width="642" />
HTTP3.0:
因为上述TCP导致的问题,HTTP3.0转向底层使用UDP,为了保证可靠传输,需要QUIC来实现可靠传输。
QUIC:
QUIC(Quick UDP Internet Connection)是谷歌推出的一套基于UDP的传输协议,它实现了TCP + HTTPS + HTTP/2的功能,目的是保证可靠性的同时降低网络延迟。因为UDP是一个简单传输协议,基于UDP可以摆脱TCP传输确认、重传慢启动等因素,建立安全连接只需要一的个往返时间,它还实现了HTTP/2多路复用、头部压缩等功能。
众所周知UDP比TCP传输速度快,TCP是可靠协议,但是代价是双方确认数据而衍生的一系列消耗。其次TCP是系统内核实现的,如果升级TCP协议,就得让用户升级系统,这个的门槛比较高,而QUIC在UDP基础上由客户端自由发挥,只要有服务器能对接就可以。
https://i-blog.csdnimg.cn/blog_migrate/4e1b7fcb43191d5500e581f47218a6b1.png" />
①基于 UDP:QUIC 使用 UDP(User Datagram Protocol)作为传输协议,而不是传统的 TCP(Transmission Control Protocol)。UDP 通常被认为是一种不可靠的协议,但 QUIC 通过在应用层实现可靠性机制来弥补这一点。
②减少连接建立延迟:QUIC 通过减少握手次数来加快连接建立过程。例如,QUIC 可以实现 0-RTT(零往返时间)连接建立,这意味着客户端可以在发送第一个数据包时就开始发送应用数据,而不需要等待服务器的响应。
③多路复用:QUIC 支持在一个连接中同时传输多个数据流,这可以避免 TCP 中的“队头阻塞”问题。每个数据流独立,即使某个数据流出现延迟或丢包,也不会影响其他数据流。
④内置加密:QUIC 在协议设计中集成了加密机制,提供了类似于 TLS(Transport Layer Security)的安全性。这不仅提高了安全性,还减少了加密握手的延迟。
⑤连接迁移:QUIC 支持连接迁移,即当客户端的网络条件发生变化(例如从 Wi-Fi 切换到蜂窝网络)时,连接可以无缝切换到新的网络接口,而不会中断数据传输。
⑥拥塞控制:QUIC 实现了先进的拥塞控制算法,如 Cubic 和 BBR(Bottleneck Bandwidth and RTT),以优化网络性能和减少丢包。