从HTTP/0.9到HTTP/3:细数http协议的进化史
http协议是前端工作者必须了解的知识,也是面试的重要考点,今天就讲一下http协议的发展历程。
一、http0.9
http0.9是在1991年发布的协议,考虑到当时的社会情况和计算机发展,我们不难想象,彼时的电脑最多就是向服务器请求一个页面,所以协议也就较为简单,规定服务器只能返回html格式的字符串。
二、http1.0
到了1996年,计算机飞速发展,http协议随之升级。它增加了更多格式内容的传输,诸如图像、视频、二进制文件等,此外还增加了post请求和head请求,丰富了浏览器与服务器的互动手段。同时引入缓存、状态码等功能。
三、http1.1
但很快,到了1997年的时候,http1.1版本就发布了。这是因为http1.0有着明显的缺点:http1.0协议规定每个数据发送完毕后,对应传输层的tcp连接就要中断。如果资源请求频率过高的话,会导致tcp连接的重复连接和中断。为了解决这一问题,1.1版本引入和持久连接,使得请求可以基于tcp连接多次复用。同时还引入了管道机制,允许请求可以同时发送,不必再等上一次的请求结果返回。这里值得注意的时,服务器端的请求返回仍然是按顺序的。此外,它还增加了put、patch、options、delete请求等。这一协议直到今天仍然广泛使用。
四、http2
http1.1用了二十多年了,使用情况也还ok,但工程师们不满足于此,觉得有必要进一步优化。主要是针对http1.1的请求头数据太大(毕竟现在cookie都老长了,还经常来回传输)、response是按照顺序返回的、不支持服务器推送等等缺点做了优化。
五、http3
http3以前的协议都是基于更底层的tcp协议,tcp协议有一个很好的优点就是它很可靠。如果有一个数据包丢失了没传到客户端,那它会要求服务器再次发送,直到接收到完整的数据(当然,实在接收不到就算这个请求超时相应挂掉了)。对于网络连接状况好的地方来说,这都不是事,可对于网络连接差的地区,要是有一个数据包丢失,那这个请求剩余的数据包就要等待了。如果有多个请求的话,他还会影响后面请求的处理。同时,由于现在基于一个tcp管道有了复用功能,很多响应几乎都可以同时响应,这对服务器的压力其实也蛮大的,导致瞬时 QPS 暴增。再者,网络宽带以及客户端、服务端的性能或者说资源也有限制,不可能一瞬间全部传输完毕。工程师们觉得,那干脆基于UDP协议弄一个新版本出来,于是http3应声落地。它是基于UDP的一个新协议,改掉了底层的tcp协议并对传输做了优化和调整以保证数据传输的完整性。
总结
除了功能之外,可以看到http协议的发展主要往数据更轻、连接更快的方向发展。当然,当下主要是http1.1和http2的天下,不过也有一些大厂尝试http3了,让我们期待它的使用吧!