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

HTTP1.0与HTTP1.1

1.长连接

HTTP1.0需要主动设置connection:keep-alive的连接方式,才能开启长连接。
HTTP1.1默认支持长连接,在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟,一定程度上弥补了HTTP1.0每次请求都要创建连接的缺点。

2.带宽优化

HTTP1.0中header和body必须一起发送,有时会造成浪费带宽的现象,例如客户端只是需要某个对象的一部分,而服务器却将整个对象送过来了,并且不支持断点续传功能。
HTTP1.1则在请求头引入了range头信息,允许只请求资源的某个部分,即返回码是206(Partial Content),这样就方便了开发者自由的选择以便于充分利用带宽和连接。

3.缓存处理

HTTP1.0中主要使用header里的If-Modified-Since,Expires来做为缓存判断的标准。
HTTP1.1则引入了例如ETag,If-None-Match等更多可供选择的缓存头来控制缓存策略。

4.HOST头域

HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,请求消息中的URL并没有传递主机名。
但随着虚拟主机技术的发展,一台服务器上可以存在多个虚拟主机,共享一个IP地址。
HTTP1.1的请求消息和响应消息都应支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)。

5.新增错误状态码

HTTP1.1中新增了24个错误状态响应码,如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上的某个资源被永久性的删除。

HTTP2.0新特性

1.多路复用

HTTP2.0采用多路复用的技术,可以做到在一个连接并行的处理多个请求。

2.header压缩

HTTP1.0和1.1的header带有大量信息,而且每次都要重复发送,HTTP2.0使用encoder来压缩需要传输的header大小。

3.服务器推送

客户端对支持HTTP2.0的服务器请求某个资源时,服务器会顺便把一些客户端需要的别的资源一起推送过来,这样只需要一次HTTP通信就可以得到全部资源,提高了性能。

4.解析格式

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

猜你喜欢

转载自blog.csdn.net/lixinyi0622/article/details/84667768