程序员面试必考题(二十五)---SPDY与HTTP/2协议

SPDY(SPDY是Speedy的昵音,意为更快),是Google开发的基于TCP协议的应用层协议。SPDY协议的目标是优化HTTP协议的性能,通过压缩、多路复用和优先级等技术,缩短网页的加载时间并提高安全性。SPDY协议核心思想是尽量减少TCP连接数,而对于HTTP的语义未做太大修改(比如,HTTP的GET和POST消息格式保持不变),基本上兼容HTTP协议。

超文本传输协议(HTTP)是一个非常成功的协议,但是HTTP/1.1及之前版本的HTTP协议均是针对20世纪90年代之期网络与Web应用需求而设计,其一些特点已经对现代应用程序的性能产生了负面影响,比如:

  1. HTTP/1.0一次只允许在一个TCP连接上发起一个请求;HTTP/1.1流水线技术也只能部分处理请求并发,并仍然存在队列头阻塞问题,因此客户端在需要发起多次请求时,典型情况下,通常采用建立多连接来减少延迟。

  2. 单向请求,请求只能由客户端发起。

  3. 请求报文与响应报文首部信息冗余量大。

  4. 数据未压缩,数据传输量大。

SPDY正是Google在HTTP即将从1.1向2.0过渡之际推出的协议,长期以来一直被认为是HTTP 2.0可行选择。

SPDY与HTTP相比,具有如下优点:

  1. SPDY支持多路复用,实现请求优化;

  2. SPDY支持服务器推送技术;

  3. SPDY压缩了HTTP报文首部信息,节省了传输数据带宽;

  4. SPDY强制使用SSL传输协议,全部请求由SSL加密,信息传输更安全。

HTTP/2协议通过定义一个HTTP语义向底层连接的优化映射,来解决这些问题。HTTP/2允许在同一连接上交错地发送/接收请求报文和响应报文,使用高效的HTTP报头字段编码,还支持请求优先级,使让更重要的请求能更快速被处理,从而进一步提升性能。另外,HTTP/2通过使用二进制的消息帧,实现消息的高效处理。

HTTP/2 提供了HTTP语义的优化传输。HTTP/2支持所有HTTP/1.1的核心特征,并且在不同的方面做的更高效。

HTTP/2的基本协议单元是帧(frame),每个类型帧用于不同用途。例如, HEADERS帧和DATA帧构成基本的HTTP请求报文和响应报文,其他类型帧,如SETTINGS帧、WINDOW_UPDATE帧和PUSH_PROMISE帧用于支持HTTP/2的其他特性。

HTTP/2的请求多路复用是通过将每个HTTP请求/响应交换与其自身的流进行关联来实现的。流在很大程度上是相互独立的,因此一个阻塞或终止的请求/响应并不会影响其他流。

HTTP/2的流量控制和优先级能确保高效地使用复用流。流量控制有助于确保只传输接收方使用的数据,优先级可以确保有限的资源被优先用于最重要的流。
HTTP/2添加了一种新的交互模式,即服务器可以向客户端推送消息。服务器推送允许服务端预测客户端需要来发送数据给客户端,平衡网络利用率以及潜在的延迟。

HTTP/2帧包含的HTTP报头字段是压缩的。HTTP请求有可能是高度冗余的,因此压缩能显著减少请求和响应的大小。

HTTP/2使用与HTTP/1.1相同的“http”和“https”URI方案,并且共享相同的默认端口号:“http” URI的默认端口号为80,“https” URI的默认端口号为443。HTTP/2可以使用加密(推荐),也可以不使用加密,“h2”标识使用TLS的HTTP/2(即安全的HTTP/2),“h2c”则标识运行在明文TCP之上的HTTP/2(即非加密的HTTP/2)。

例题:

下面关于HTTP/2的描述中,错误的是?

A.HTTP/2基于SPDY协议,充分解决了TCP连接的限制,它允许多个并发HTTP请求公用一个TCP会话

B.针对只能由客户端发起请求的问题,HTTP/2添加了一种新的交互模式,即服务器推送

C.HTTP/2提供了HTTP语义的传输优化,支持HTTP/1.1的所有核心特征,并且在其他方面做得更高效

D.HTTP/2是以安全为目标的HTTP通道,简单讲是HTTP的安全版,即HTTP下加入SSL层

该题为楚楚街笔试题,根据前文的分析,可见选项A、B、C均是正确叙述,只有选项D的叙述不准确。

《横扫offer---程序员招聘真题详解700题》,开点工作室著,清华大学出版社出版,天猫、京东等各大网上书店及实体书店均已开始发售。

推荐阅读更多精彩内容