审核中~
溜忙之道
首页
溜忙手册
offer之道
项目Git
写文章
登录
·
注册
登录
没有账号,去注册
注册
已有账号,去登录
博客
http 发展历程
南易_站长
阅读量:18531
关注
http 发展历程
> web项目开发中,我们通过http来传输数据,这里我们来看一下,http是什么以及发展历程。 ## what HTTP,超文本传输协议。 在我们非常页面的开发中,用来传输html、css、js、图片、cgi等。 ## HTTP 0.9 HTTP 0.9版本,很简单,只有一行请求(请求方法+路径),响应只有一个HTML。 ## HTTP 1.0 正式的版本是HTTP 1.0 请求:请求版本 + 首部 响应:响应状态 + 首部(响应对象可以包含任何类型:html、纯文本、图片等) ## HTTP 1.1 HTTP 1.1 是对于HTTP 1.0的优化,减少延迟。下面看下1.1增加的新功能。 ### 持久链接 1.1的持久链接可以说是1.1的一大特色。 在1.0中,每次http链接都要进行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](https://link.juejin.im/?target=http%3A%2F%2Fxxxbw.github.io%2F2016%2F04%2F06%2Fhttp1-x-2-0%2F)
评论
表情
发送
0
评论