HTTP1.0、HTTP1.1和HTTP2.0的区别---学习

影响一个HTTP网络请求的因素主要有两个:带宽和延迟

延迟:

- 浏览器阻塞:

        浏览器对同一个域名,连接数会有所限制,如果超出了最大连接数,后续请求就会被阻塞。(如果要做页面热点计算的话或者广告,那就得注意域名的使用了)

- DNS查询

- 建立连接:

        HTTP是基于TCP协议的,至少第三次握手时才能带HTTP请求报文,以达到真正的连接

 

一、HTTP1.0和HTTP1.1的一些区别

1、缓存处理,在1.0中主要使用header里的if-Modified-Since,Expires来作为缓存判断的标准,1.1则引入了更多的缓存控制策略如Entity tag,if-Unmodified-Since,if-Match,if-None-Match等

2、带宽优化及网络连接使用,1.0中存在一些浪费带宽的现象,例如客户端只需要某对象的一部分,而服务器却将整个对象送了过来,并且不支持断点续传功能。1.1在请求头引入了range头域,它允许只请求资源的某一部分(返回码206)

3、1.1中新增24个错误状态响应码

4、Host头处理,在1.0中认为每台服务器都绑定一个唯一的IP地址,因此在请求消息中的URL没有hostname。随着虚拟主机技术的发展,一台物理服务器上可以存在多个虚拟机,并且共享一个IP地址。所以在1.1的请求消息和响应消息都支持Host头域,并且请求消息没有Host头域,会报400错误

5、长连接,HTTP 1.1支持长连接(PersistentConnection)和请求的流水线(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,在HTTP1.1中默认开启Connection: keep-alive,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

 

二、HTTP2.0和HTTP1.X相比的新特性

1、新的二进制格式(Binary Format),HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

2、多路复用(MultiPlexing),即连接共享,即每一个request都是是用作连接共享机制的。一个request对应一个id,这样一个连接上可以有多个request,每个连接的request可以随机的混杂在一起,接收方可以根据request的 id将request再归属到各自不同的服务端请求里面。

3、header压缩,如上文中所言,对前面提到过HTTP1.x的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来减少需要传输的header大小,通讯双方各自cache一份header fields表,既避免了重复header的传输,又减小了需要传输的大小。

4、服务端推送(server push),同SPDY一样,HTTP2.0也具有server push功能。

 

三、结语

在服务器上看到curl -h,看到了一个指令提示,才去找了相关的资料学习一下,没想到还真是学到不少东西

 -0, --http1.0       Use HTTP 1.0 (H)
     --http1.1       Use HTTP 1.1 (H)
     --http2         Use HTTP 2 (H)

不同的协议版本之间的差异性,可以看出当时的设计思路,没有啥可以一设计就十分完美的,就得迭代~从参考资料这两篇文章中,我也学习到不少,至少知道了浏览器对一个域名的请求数有限制的,如果知道这一点,可以给页面的渲染速度优化带来不少的好处。学习了!

 

 

参考资料:

HTTP1.0、HTTP1.1和HTTP2.0的区别

浏览器请求队列机制-请求为什么会阻塞

你可能感兴趣的:(学习,HTTP,http)