HTTP1.0/1.1/2.0 的区别

HTTP1.0

HTTP 协议的第⼆个版本,第⼀个在通讯中指定版本号的HTTP协议版本

HTTP 1.0 浏览器与服务器只保持短暂的连接每次请求都需要与服务器建⽴⼀个 TCP 连接

服务器完成请求处理后⽴即断开 TCP 连接,服务器不跟踪每个客⼾也不记录过去的请求

简单来讲,每次与服务器交互,都需要新开⼀个连接

HTTP1.1

在 HTTP1.1 中,默认⽀持⻓连接( Connection: keep-alive ),即在⼀个TCP连接上可以传

送多个 HTTP 请求和响应,减少了建⽴和关闭连接的消耗和延迟

建⽴⼀次连接,多次请求均由这个连接完成

这样,在加载 html ⽂件的时候,⽂件中多个请求和响应就可以在⼀个连接中传输

同时, HTTP 1.1 还允许客⼾端不⽤等待上⼀次请求结果返回,就可以发出下⼀次请求,但服务器端

必须按照接收到客⼾端请求的先后顺序依次回送响应结果,以保证客⼾端能够区分出每次请求的响应

内容,这样也显著地减少了整个下载过程所需要的时间

同时, HTTP1.1 在 HTTP1.0 的基础上,增加更多的请求头和响应头来完善的功能,如下:

引⼊了更多的缓存控制策略,如If-Unmodified-Since, If-Match, If-None-Match等缓存头来控制缓

存策略

引⼊range,允许值请求资源某个部分

引⼊host,实现了在⼀台WEB服务器上可以在同⼀个IP地址和端⼝号上使⽤不同的主机名来创建多

个虚拟WEB站点

并且还添加了其他的请求⽅法: put 、 delete 、 options

HTTP2.0

⽽ HTTP2.0 在相⽐之前版本,性能上有很⼤的提升,如添加了⼀个特性:

多路复⽤

HTTP/2 复⽤ TCP 连接,在⼀个连接⾥,客⼾端和浏览器都可以同时发送多个请求或回应,⽽且不

⽤按照顺序⼀⼀对应,这样就避免了”队头堵塞”

⼆进制分帧

帧是 HTTP2 通信中最⼩单位信息

HTTP/2 采⽤⼆进制格式传输数据,⽽⾮ HTTP 1.x 的⽂本格式解析起来更⾼效

将请求和响应数据分割为更⼩的帧,并且它们采⽤⼆进制编码

HTTP2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流每个数据流都以消息的形式发送,⽽消息⼜由⼀个或多个帧组成。多个帧之间可以乱序发送,根据帧

⾸部的流标识可以重新组装,这也是多路复⽤同时发送数据的实现条件

⾸部压缩

服务器推送

总结

HTTP1.0:

浏览器与服务器只保持短暂的连接,浏览器的每次请求都需要与服务器建⽴⼀个TCP连接

HTTP1.1:

引⼊了持久连接,即TCP连接默认不关闭,可以被多个请求复⽤

在同⼀个TCP连接⾥⾯,客⼾端可以同时发送多个请求

虽然允许复⽤TCP连接,但是同⼀个TCP连接⾥⾯,所有的数据通信是按次序进⾏的,服务器只有

处理完⼀个请求,才会接着处理下⼀个请求。如果前⾯的处理特别慢,后⾯就会有许多请求排队等

新增了⼀些请求⽅法

新增了⼀些请求头和响应头

HTTP2.0:

采⽤⼆进制格式⽽⾮⽂本格式

完全多路复⽤,⽽⾮有序并阻塞的、只需⼀个连接即可实现并⾏

使⽤报头压缩,降低开销

服务器推送