从 HTTP1.x 到 HTTP 2.0 变迁

从 HTTP1.x 到 HTTP 2.0 变迁

前言

互联网世界中,HTTP协议算是使用最广泛的协议。最近Http2.0诞生再次使得互联网技术成为关注的焦点。接下来我们一起看看关于HTTP的那些事。

HTTP

说到 HTTP 难免会提及 TCP 协议,HTTP 是建立在 TCP 协议之上的,TCP 协议作为传输层协议其实离应用层并不远。

TCP 协议的性能直接影响了 HTTP

  • TCP建立连接时需要三次握手1.5个RTT。
  • 慢启动(slow start)

目前,影响网路请求的两个主要因素: 带宽和延迟。随着网络基础设施建设带宽得到极大提升,大部分是延迟在影响响应速度。

HTTP 1.0 最大问题:

  • 连接无法复用
  • head-of-line blocking (队头阻塞)

连接无法复用会导致每次都需要进行三次握手和慢启动。head-of-line blocking 则会导致带宽无法充分利用,以及后续健康请求阻塞。

解决连接无法复用问题

在HTTP 1.0协议里设置Connection: Keep-Alive。可以在一定时间内复用连接。对于PC端浏览器来说效果明显,对移动APP来说成效不大。

方案一: 基于TCP的长链接

基于 TCP 协议,使用 TCPSocket 编程技术。 成熟方案如:Google的protobuf。
缺点:实现难度大,需要自己制定协议。
有点:信息的上报和推送变及时,减轻服务器压力。

方案二: http long-polling

客户端在初始状态就会发送一个polling请求到服务器,服务器并不会马上返回业务数据,而是等待有新的业务数据产生的时候再返回。
难度:链接增多会增加服务器压力,移动网络不稳定需要考虑重建链接,稳定性不好,需要业务数据过期机制。

方案三: http streaming

同long-polling不同的是,server并不会结束初始的streaming请求,而是持续的通过这个通道返回最新的业务数据。

方案四:web socket

优点:双向的数据通道,提供了http所缺少的长连接功能。
缺点:较新,大部分浏览器不支持。

SPDY

SPDY 是Google开发的基于TCP的会话层协议,用以最小化网络延迟,提升网络速度,优化用户的网络使用体验。SPDY并不是一种用于替代HTTP的协议,而是对HTTP协议的增强。新协议的功能包括数据流的多路复用、请求优先级以及HTTP报头压缩。

SPDY分为基础功能和高级功能,基础功能默认开启,高级功能手动开启。

基础功能

  • 多路复用(multiplexing)。多路复用通过多个请求stream共享一个tcp连接的方式。解决了队头阻塞,降低了延迟提高带宽利用率。
  • 请求优先级(request prioritization)。在多路复用的时候会出现关键请求被阻塞。SPDY 允许每次request设置优先级。
  • header压缩。压缩率达到80%以上。

高级功能

  • server推送(server push) 。开启server push 之后,服务器通过X-Associated-Content header告知客户端有新内容推送过来。
  • server暗示(server hint) 。不推送,只提示有新内容。

SDPY 作为对 HTTP1.0 请求与应答传输方式的修改,可以现有的服务器应用不需要修改可以直接使用。

HTTP 2.0

SPDY 的诞生和表现说明了现有互联网设施基础和http协议广泛使用的前提下,可以通过修改协议层来优化HTTP1.x。针对修改业界反馈很好。HTTP2.0有多路复用,请求压缩,优先级控制,server push 等亮点。

HTTP2.0主要改动

HTTP2.0 采用了新的二进制格式,相比 1.0 基于文本的明文极大的方便协议的解析。HTTP1.x 诞生的时候使用明文协议,三部分组成:start line, header, body。协议解析是基于文本的,协议解析存在缺陷需要考虑的场景很多。

  • length:定义了整个frame的开始到结束。
  • type:定义frame的类型(一共10种)
  • flags: 用bit位定义一些重要的参数
  • stream ID: 用作流控制
  • payload: request的正文

HTTP2.0 采用连接共享(多路复用),使用上面提到的 StreamID 用来作连接共享机制的。一个 request 对应一个 stream 并分配一个id,接收方可以根据id区分归属,可以调整优先级,并且可以动态调整请求。

另外,HTTP2.0 提供了 Header 压缩,重置连接表现更好,Server Push, 流量控制(Flow control),以及安全的 TLS/SSL 传输协议。

移动端对HTTP2.0的支持情况。iOS系统从iOS8开始通过 NSURLSession 来支持SPDY,在iOS9+开始支持HTTP2.0新版本的ATS默认支持HTTPS进行网络传输。HTTP2.0只能在新系统中支持,SPDY作为过渡方案存在。

HTTPS

超文本传输安全协议(英语:Hypertext Transfer Protocol Secure,缩写:HTTPS,常称为HTTP over TLS,HTTP over SSL或HTTP Secure)是一种通过计算机网络进行安全通信的传输协议。HTTPS经由HTTP进行通信,但利用SSL/TLS来加密数据包。HTTPS开发的主要目的,是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。

HTTPS 在通信中加入了 TLS 传输层安全性协议,在应用程序之间创建安全的连接,防止被窃听及篡改。

来自掘金

TLS 传输层安全协议, 前身是 SSL 安全套接字层一个安全协议。

参考文章:分分钟让你理解HTTPS