HTTP进化历程回顾

2021-03-13  本文已影响0人  丑人林宗己

HTTP,全称是Hypertext Transfer Protocol,译作超文本传输协议,在OSI模型中处于应用层,所以常常称之为应用层协议。如今的HTTP协议在整个互联网应用中当属翘楚,相较于其他各类诸如TCP/UDP/IP等等协议,也是最广为流传。

粗略回顾一下HTTP协议的发展历程,知悉HTTP协议是如何推演,进化。

1.0 ~ 0.9

HTTP协议整个职业生涯中,不得不提的一个版本就是1.0这个版本,因为正是这个版本加上了版本号这样的东西,那么HTTP 1.0版本究竟都有哪些内容呢?

第一个版本定的是HTTP 1.0,那么在没有版本号的HTTP协议就被认为是0.9(我猜测的,暂时没有找到作证的资料),而这个版本相当粗糙,只有简单的GET,算是最纯粹的一个文本协议,所以能看出1.0版本对原来版本做的扩展与补充,属于功能性上的扩展。

1.1

HTTP协议整个职业生涯中,目前最为大众所知的,应该是1.1这个版本,那么这个版本又给我们带来了什么核心的内容?这要回到1.0协议中有什么样的内容是急需解决的?HTTP每一次请求都需要建立新的TCP连接,意味着需要重复进行三次握手四次挥手,这是一个相当大的性能损耗。所以HTTP 1.0协议带来了什么值得关注的内容呢?

其他的也包括一些内容,比如:

2.0

至此,HTTP 1.1协议一直沿用至今,作为它可以表述足够负责的语义,能满足极多的业务场景,但是HTTP 1.1协议还存在一些问题,比如:

HTTP 2.0(谷歌出过一个SPDY协议,可以称之为HTTP 2.0前身)在这个基础上做出了几点需要重点关注的优化:

HTTP 2.0协议对请求引入几个重要的概念,分别为帧,消息,流HTTP 2.0会在发送端将请求拆分成二进制帧,包括Http Header帧Request Body处理成Data帧,这些帧在TCP通道上可以并行写入,所以在接收端需要重新将这些帧分门别类,重新归整为消息,原理就是每个帧上都带着一个流ID

3.0

毫无疑问,相比较于HTTP 1.1版本,2.0版本在性能上的提升是显而易见的,网上也有一些压测对比,可以了解一下。但是不要忘记一个问题,HTTP协议截止2.0版本一直都是构建在TCP协议上的应用层协议,所以TCP协议本身携带的问题无疑也会影响到HTTP,比如众所周知的Head-of-line Blocking问题,译作线头阻塞问题。它是什么问题?简而言之,站在TCP协议的视角并不能窥其HTTP协议的内容,故而当TCP发生丢包导致的超时重传等问题,HTTP上层应用是无法解决的,该阻塞还是会阻塞,上层的并行能力在底层是完全不可知的。那么,基于TCP协议构建的HTTP协议似乎是无解的问题。

TCP确实是无解的,所以谷歌又搞了个QUIC协议出来,全称Quick UDP Internet Connections,基于UDP协议构建的一个HTTP协议,也就是HTTP 3.0。为何UDP可以解决TCP无法解决的问题?因为UDP没有丢包重传等机制,所以前面的包丢了并不会影响后边的包。

但是,说话的时候你总不能对着谁说,然后也不管他听不听得到吧?所以HTTP 3.0需要把TCP协议的重传机制在应用层上再实现一遍。

关于QUIC协议参考资料:
https://mp.weixin.qq.com/s/CbdlTq1xb2N1WSnmGfmEQQ
https://mp.weixin.qq.com/s/ciR-1N4z0zvGOJSoyrvMUA

很粗糙,这并不是想科普HTTP协议,毕竟该协议内容即为庞杂,三言两语也说不完,何况笔者所学也是寥寥无几。笔者更想表达的是在回顾HTTP这样的全民协议的发展历程后,期望于对HTTP协议有一些本质的认知,以及未来对协议的选择与设计上有独立的思考与见解。

上一篇 下一篇

猜你喜欢

热点阅读