HTTP/2 协议常见疑问(译)

为何修订 HTTP 协议

HTTP/1.1 应用于 Web 已有15年的历史,协议的缺陷和不足开始显现。nginx

对比过去,如今的 web 页面须要加载更多资源,HTTP1.x 协议规定一个 TCP connection 不能并行发起多个 request 请求,这使得页面在快速加载大量资源时变得困难。web

为处理上述问题,HTTP1.1 协议容许浏览器使用多个 TCP connection 来并行发起多个 request 请求。这种处理方式存在缺陷,使用太多的 connection 会拔苗助长(TCP 拥塞控制会致使网络效率低下),同时也会出现不公平现象(浏览器都设法占用超出它本该分配的网络资源)。浏览器

HTTP/2 跟 SPDY 有什么关系

在 SPDY 协议被 Mozilla 和 nginx 等厂商实现后,相对于 HTTP/1.x 展示出了明显的性能提高,这时 HTTP/2 协议的讨论和指定开始提上议程。服务器

通过一轮提议和投票,最被选择了 SPDY/2 做为 HTTP/2 协议的基础。此后,在工做组和实现者的讨论下 HTTP/2 协议又作出了一系列变动。在这个过程当中,SPDY 协议的核心开发者参与了 HTTP/2 协议的开发,这其中包括 Mike Belshe 和 Roberto Peon。网络

2015年9月,Google 宣布为了支持 HTTP/2 协议,未来再也不支持 SPDY 协议。并发

HTTP/2 跟 HTTP/1.x 的区别

整体来讲区别有如下几点:工具

  • 使用二进制来代替文本格式
  • 使用多路复用来代替有序和阻塞
  • 使用一个 connection 来处理并行请求
  • 使用 header 压缩来减少 header 大小
  • 容许服务端使用 push 来预先推送客户端须要的 cache

为何 HTTP/2 是二进制的

二进制协议解析效率更高,更节省网络资源,相对于 HTTP/1.1 协议使用文本格式的空格或空行来解析数据,二进制协议更不容易出错性能

例如, HTTP/1.1 定义了四种不一样解析消息的方式,HTTP/2 只有一种解析方式网站

虽然 HTTP/2 不能经过 telnet 来使用,可是可使用 Wireshark 等工具设计

为何 HTTP/2 是多路复用

HTTP/1.x 存在所谓的“头部阻塞”问题,也就是每一个 TCP connection 只能同时发起一个 request 请求。

HTTP/1.1 尝试使用 pipelining 来解决这个问题,这没有彻底陈述清楚该问题(一个大的或者慢的响应会阻塞这以后的其余请求)。同时 pipelining 被证实很难部署,由于许多中间件和服务器不能正确的处理它。

这使得客户只能经过猜想肯定与站点的哪一个链接发起请求,使用实际可用链接数的10倍来加载页面是很常见的,这会严重影响性能,一般会致使请求阻塞。

多路复用容许多个请求和响应的 message 在一个 TCP 链接上并行处理来解决这个问题,甚至可让不一样 message 的内容同时混合在一块儿处理,也就是客户端可使用单个 TCP connection 来加载完整的页面

为何只有一个 TCP connection

使用 HTTP/1,浏览器能够在每一个域名上打开四个到八个链接。不少网站同时使用多个子域,这样加载单个页面会打开多达30个 TCP 链接。

一个应用并发使用太多的链接打破了构建 TCP 协议的基础设计,每一个链接会响应大量数据让网络的缓冲区溢出,从而触发 TCP 的拥塞控制和 TCP 重传机制

相关文章
相关标签/搜索