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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值