HTTP/2与HTTP1.1

347 阅读2分钟

一、HTTP1.1的优化

1.1相对于HTTP/1.0的提升

持久连接:使用HTTP/1.0时,每发起一个请求,都要新建一次 TCP 连接,若一个页面引用很多资源文件,那就会做了很多无谓的 TCP 连接建立和断开,增加了通信开销。

而HTTP/1.1使用了持久连接,也叫做长连接,可以在一次TCP连接中发送和接收多个HTTP请求和响应,只要浏览器或服务器没有明确断开连接,则一直保持 TCP 连接状态(当然如果超过一定的时间都没有数据交互,服务器还是会主动断开这个连接)。

管道传输:就是可以同时发送多个HTTP请求给服务器,不必等到前一个请求回来之后再继续发送第二个请求,因此可以减少整体响应时间。

但是响应必须按照请求发出的顺序依次返回。因此如果某个请求处理比较耗时,就有可能对后面的响应阻塞。目前大部分浏览器都是默认关闭了的。

分块传输编码:在 HTTP/1.1 中,允许服务器将响应分成多个块,主要在响应头中指定 Transfer-Encoding: chunked 标识当前为分块编码传输,可以将内容实体分装成一个个块进行传输。

Host头部字段:在 HTTP/1.0 中每台服务器都绑定一个唯一的 IP 地址,因此一台服务器无法搭建多个站点。而在HTTP/1.1支持虚拟主机,即在同一个IP地址下,通过不同的域名来访问不同的网站,主要利用host 字段,指定请求将要发送到的服务器主机名和端口号。

二、HTTP2.0的优化

二进制格式:在HTTP/1.x中传输的数据都是纯文本形式的报文,而2版本中使用二进制编码,响应的信息都是使用二进制,这种方式可以提高数据传输的效率,因为在接收到数据之后无需对明文形式的报文转成二进制。

头部压缩:使用 HPACK 算法来压缩头部内容,使得在网络上传输变快。当你同时发出的多个请求,他们的头部信息都是一样或者类似,那么HTTP2.0会将这些重复部分消除。

服务器主动推送:允许服务端主动向浏览器推送资源。例如客户端请求 HTML 文件时,服务端可以同时将 JS 和 CSS 文件发送给客户端。

多路复用:可以在单个TCP连接上并行处理多个请求和响应,解决了HTTP1.1的阻塞问题。