HTTP - 发展历程

web项目开发中,咱们经过http来传输数据,这里咱们来看一下,http是什么以及发展历程。css

what

HTTP,超文本传输协议。html

在咱们很是页面的开发中,用来传输html、css、js、图片、cgi等。git

HTTP 0.9

HTTP 0.9版本,很简单,只有一行请求(请求方法+路径),响应只有一个HTML。github

HTTP 1.0

正式的版本是HTTP 1.0web

请求:请求版本 + 首部浏览器

响应:响应状态 + 首部(响应对象能够包含任何类型:html、纯文本、图片等)服务器

HTTP 1.1

HTTP 1.1 是对于HTTP 1.0的优化,减小延迟。下面看下1.1增长的新功能。websocket

持久连接

1.1的持久连接能够说是1.1的一大特点。socket

在1.0中,每次http连接都要进行tcp的三次握手和四次挥手。若是说请求很少的话,影响却是不大,可是请求多的话,那么请求的总时间就会大大延长。tcp

因而,1.1支持了持久连接(keep-alive),第一次连接以后,若是客户端&服务器都没有进行断开的操做,那么,tcp连接就一直保持。这样,当http请求多的时候,天然,速度相比于1.0的话就快得多了。

咱们能够抓一下掘金的请求,响应头中能够看到,使用的是http 1.1 ,而且connection的状态是keep-alive。

HTTP管道

http的请求队列,是一个先进先出的队列,在1.0的时候,这个队列是由客户端控制的,每次发送请求的时候,需求等待上一个请求回包以后,再继续发下一个请求。这样会出现服务器会有大部分时间是属于空闲状态的。

因此1.1的版本,把http请求队列放到了服务器,客户端能够不用等待回包就能够继续发送下一个请求,服务器直接在队列中获取请求,而后一个一个处理,这样,就能够有效提高请求的效率。

使用多个tcp连接

http请求队列的处理移动到服务端以后,确实速度能够加快,不过这也是串行的,要提高服务器的效率,那咱们须要进行并行的操做。

因此,1.1作的就是能够同时开多个tcp连接,这样就能够作到并行啦。不过,因为浏览器限制,每一个域名的tcp连接最多只能开6个。

固然,若是页面想开更多的tcp连接,也是有办法的,tcp连接数是按域名区分的,那么咱们只要再添加域名就能够增长tcp连接数啦~

HTTP 2.0

2.0是第二个正式的版本,对1.1作了更多的优化。

二进制分帧层

1.1版本传输的数据是文本,相比于文本,二进制传输起来更加方便,底层不用再进行解析。

多路复用

1.1的时候,为了解决并行,开了多个tcp连接。多路服用,就是为了解决并行而出现的。

1.1传输的数据是文本,不能乱序传输,因此只能串行。

2.0传输的是二进制,帧是最小的单位,这里对帧标志顺序,既然有顺序,传输就能够并行了,接受数据方再根据数据帧进行拼接,就能够获得正确的信息。

因而,多路复用解决了单个tcp并行传输的问题。

首部压缩

客户端&服务器对首部表进行存储

第一次发送整个首部,以后根据diff来更新diff部分的数据。

虽然首部内容很少,可是每条数据都少一点的话,世界也将更加美好。

服务器推送

服务器推送,有点像websocket。

当用户请求页面的时候,服务器先返回html,而后客户端再根据html解析请求须要的资源,这样子客户端其实要进行多个请求。

那么服务器推送的效果呢?当客户端访问html以后,服务器就先把客户端须要的资源发送给客户端,那么,客户端须要资源的时候,就不用发送请求来,由于客户端预先就拿到来资源,从而减小请求的时间。

HTTP 3.0

3.0的版本,能够说是改头换貌。

咱们知道http 2.0以前,都是基于tcp的,由于tcp稳定。

而3.0却抛弃来tcp,拥抱udp,稳定的事情就交给上层来作,也就是quic。

这个后面再细讲,先留白。

写在最后

http无处不在,不管是开发需求也好,仍是优化项目也好,都要熟悉http,才能更好的理解。

最后补充一下楼主以前的文章 HTTP1.1 vs HTTP2.0

相关文章
相关标签/搜索