介绍HTTP基础以及对比SPDY协议

介绍

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写。同时HTTP协议属于TCP/IP协议族的内部的一个子集。通常我们使用的网络都是在TCP/IP协议族基础上运作的。

TCP/IP族中有一个重要的点就是分层:

  • 应用层:决定了向用户提供应用服务时的活动。HTTP, FTP,DNS
  • 传输层:提供了网络连接中的两台计算机之间的数据传输。TCP,UDP
  • 网络层:处理网络上流动的数据包(网络传输的最小单位)。 IP
  • 数据链路层:处理连接网络的硬件部分。操作系统,设备,光纤等一切硬件范畴

分层带来的好处就是解耦。如果互联网用一个协议统筹。任何修改都要整体替换。分层后定义好各层之间的接口,各层内部可以自由改动。各层也只需要考虑自己所需要完成任务。

HTTP位于应用层,HTTP协议的出现主要是为了解决文本传输的难题。

背景

http/0.9

1990年问世,当时只有基本的文本 GET 功能。当时并没有正式的标准被建立,因此该版本可以理解为1.0之前的版本。

http/1.0

1996年公布,1.0版本完善的请求/响应模型,并将协议补充完整。标准记载于RFC1945,虽然是最早的标准,目前仍然广泛使用在服务器端。

http/1.1

1997年公布,在 1.0 基础上进行更新,增加了如 长久连接 keep-alive 与 chunked 等功能。 目前主流的协议版本,修订版标准记载于RFC2616

http/2.0

时隔将近十五年时间,标准记载于RFC7540

由于协议本身非常简单,由此设想了许多应用方法并且投入实际使用。

基础

  • 客户端-服务端架构,客户端通过URL像服务端发起请求。服务端根据接收到的请求后,向客户端发送响应信息。
  • HTTP本身是无连接的,每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。
  • 无状态的,协议对于事务处理没有记忆能力。一个新的请求就有一个新的响应,不会保存之前的任何请求和响应。

http这样设计可以节省传输时间,也可以处理大量食物,对于不需要先前信息的请求,应答也相对较快。

但是随着业务发展,无状态协议使得业务处理起来相对麻烦,因此1.1版本,引入的Cookie技术,以此来管理状态(但http仍然是无状态协议)。

瓶颈

简单来说就是,在服务端大量数据更新的情况下,HTTP无法解决更新后,数据在客户端回显的实现。使用HTTP只能频繁的访问服务端来确认。如果服务端没有更新,那么就会产生大量的无聊通信。

下面这些HTTP标准就是产生瓶颈的原因:

  • 一条连接上只能发送一个请求
  • 请求必须从客户端发起。并且客户端不可接收“请求所对应的响应”之外的信息
  • 首部冗长,每次都要发送相同的首部。
  • 请求/响应都未经压缩,首部信息越多,延迟越大

外部解决方案

Ajax

利用JS和DOM,达到局部web页面替换加载效果。从已经加载完毕的web页面上发起请求,只更新局部页面。请求响应中的数据量减少。但是可能导致成倍的请求产生。

Comet

基于HTTP长连接的“服务器推送”技术,服务端收到请求后,会将响应挂起,当内容更新时,再返回。以此达到数据更新后,立即返回客户端的效果。延迟小,性能好。但是长期占用连接,丧失了无状态高并发的特点。

这两者虽说可以解决一部分HTTP协议带来的性能延迟,用户体验等问题,提高了易用性,但是它们依旧没有解决HTTP协议本身的存在的问题。

SPDY

为了进行根本性的改善,就需要做一些http协议上的改动。

SPDY,谷歌在09年年中时发布,它的主要目标时通过解决HTTP1.1中一些显著的性能限制,来减少网页额的加载时间。

由于HTTP已经被大量广泛应用,SPDY并没有完全改写HTTP协议,而是在TCP/IP协议族的应用层和传输层之间,加入了会话层的方式去实现。为了保证安全问题,SPDY还规定通信中必须使用SSL。

优势

通过SPDY,HTTP协议获得了额外的能力:

  1. 多路复用

    单一的TCP链接,可以无限制处理多个HTTP请求,所有请求都在一条TCP链接上完成,减少了建立和关闭连接的消耗和延迟。

  2. 请求优先级

    SPDY可以给请求逐个分配优先级顺序,为了再发送多个请求时,解决因为带宽低而导致响应变慢的问题。

  3. 压缩HTTP首部

    压缩请求和相应的首部,减少通信时候的数据包数量和发送的字节数。

  4. 推送功能

    支持服务器主动向客户端推送数据,而不必等待客户端的请求。

  5. 服务端提示

    服务端可以主动提示客户端请求所需要的资源。请求A的同时,服务端同时返回A和B的资源,客户端发现资源B已缓存的情况下,可以避免不必要的请求。

使用SPDY时,web客户端不需要做什么改动,但是浏览器和服务端都需要做一定程度上的改动,目前主流浏览器都已经做了相对应的调整。不过SPDY只针对单个域名的通信多路复用,当一个web站点请求多个域名下的额资源,改善效果会受到限制。

不过SPDY的确是一种可以消除HTTP瓶颈的技术。但是大部分网站的问题不是HTTP协议瓶颈导致的。还是有许多其他值得深入钻研并且改善的地方。

HTTP/2.0

简单了解了一下HTTP/2.0,其实就是基于SPDY设计的,但是还有有一些不同:

  • 增加了HTTP/1.1 Upgrade的机制,可在TCP上直接使用HTTP/2,不像SPDY那样必须在TLS上。即HTTP/2.0支持明文 HTTP传输,而SPDY强制使用HTTPS
  • HTTP/2.0消息头的压缩算法采用HPACK,而非SPDY采用的DEFLATE
  • HTTPS连接时使用NPN的规范版ALPN(Applcation Layer Protocol Negociation)。
  • 更完善的协议商讨和确认流程。
  • 更完善的Server Push流程。
  • 增加控制帧的种类,并对帧格式考虑得更细致。

总结

简单对比了HTTP/1.0, SPDY, HTTP/2.0的区别,太具体的基本理论和算法,还没有太深入理解。

SPDY和HTTP2.0的确都可以消除HTTP瓶颈的技术。但是大部分网站的问题不是HTTP协议瓶颈导致的。还是有许多其他值得深入钻研并且改善的地方。

即使HTTP协议被使用至今超过了20年,为了更好的性能,用户使用web时的速度体验,技术依旧需要