Google与微软想要通过SPDY与Speed+Mobility改进HTTP。本文将会介绍这两个提案并指出他们对广为使用的Internet协议带来了哪些好处。
目前,Internet工程任务组(IETF)与W3C正在网络路由、传输与安全等问题上紧密合作,包括1999年由Roy Fielding与T. Berners-Lee等人联合签名的关于HTTP 1.1的RFC 2616规范提案。自从上一个HTTP版本发布以来已经过去了12年多的时间,一些人已经开始注意到这个广为使用的Internet协议需要进行增强以面对时代的需要。目前,针对HTTP 2.0已经有多份提案被提交到了IETF,这其中包括Google SPDY与微软的HTTP Speed+Mobility。这两个提案都向后兼容于前一个版本的协议,旨在构建在现有的基础设施之上。
Google想要重点解决现有HTTP 1.1的速度问题:
HTTP实现的一个瓶颈在于HTTP需要通过多个连接来解决并发问题。这会导致一些问题,比如说为了建立连接所需的额外的往返过程、慢启动的延迟以及客户端的连接配额,这是由于客户端会防止对任何一个服务器打开过多的连接。
出于以上原因,SPDY旨在:
在一个单独的TCP连接(或是任何可靠的传输流)之上增加一个Framing Layer以实现多个并发的流。Framing Layer会针对类似于HTTP请求响应的流进行优化,比如说现在运行在HTTP之上的应用也可以运行在SPDY之上,对于Web应用来说只需做很少的修改或是无需修改。
实际上,SPDY对HTTP 1.1进行了4个主要的改进,分别是多路请求、对请求划分优先级、压缩头以及服务器的流推送。虽然目前SPDY还仅仅是个提案,但它已经被实现出来并形成了产品。Google在其很多服务与Chrome中都使用到了SPDY。其他的实现还有Apache SPDY模块、用于node.js的SPDY服务器、Netty、Firefox与Amazon Silk,Ngnix很快也会跟进。
微软针对HTTP 2.0提出的规范将重点放在了速度问题与移动上,该提案从SPDY开始到WebSockets结束。在之前与InfoQ的一封邮件交流中,来自于微软开放技术的高级程序经理及微软提案的签署者Adalberto Foresti提到“SPDY做的非常漂亮,它让人们认识到了Web性能问题并采取了全新的方式改进HTTP以让Web变得更快”。微软的提案改进了SPDY,这是通过简化”会话控制消息以删除对于WebSockets控制帧来说冗余的条目来实现的,但与现有的HTTP语义并不兼容,或是实现一些在传输层上的重要概念”。
微软的HTTP Speed+Mobility还增加了两节内容,旨在改进“物联网”上对于HTTP的使用,考虑到了CPU消耗、设备电池与资源、安全等问题。名为“Client is in control of content”的1.1.4节中提到:
考虑到Internet上各种各样的客户端以及连接数场景,客户端是定义下载什么内容的最佳场所。浏览器或是应用有关于用户当前正在做什么以及哪些数据在本地存在的第一手信息。比如说,目前使用的大多数浏览器都拥有强大的缓存,我们应该使用他们来存储不经常变化的Web元素。
HTTP 2.0提案不应该强制浏览器或是应用下载没有请求的或是已经被缓存的内容。此外,客户端要有拒绝不想要或是不需要内容的权利。客户端要能通知服务端自己已经拥有了已经缓存,不需要下载的元素。在理想情况下,这种来自于客户端,发向服务端的反馈应该考虑到内容的增量审批,这样才会形成一个高效的“推送”扩展以通过适当的安全性与正确的格式递送正确的内容。
在名为“Network Cost and Power”的1.1.5节中,作者重点谈到了电源与带宽使用问题:
速度、消耗与电源之间的抉择并不是一个简单的问题。有时,速度可能是最需要考虑的事情。但有时,带宽消耗或是电池寿命可能是决定因素。HTTP 2.0必须要能使开发者针对其具体的问题域约束进行优化(约束可能会随着时间的流逝而发生变化)而不是对通用问题给出一个统一的解决方案。
我们需要对更快的速度、更少的消耗、更低的电源使用量进行均衡处理。比如说,在网线上传递更少的数据会使页面的加载速度更快,更省电以及占用更少的带宽。但考虑到HTTP 2.0的使用场景千差万别,事实并不总是如此。比如说,对于一个电池即将耗尽或是缓存即将占满的设备来说,如果在保留HTTP 2.0中其他优化的同时能够禁用掉服务端推送更新将会提供更好的用户体验。因此,工作组需要同时考虑电源、消耗与速度问题。
为了解决方才提到的问题,微软提出通过WebSocket升级来实现会话握手、保持与Framing,规范包含了用户希望看到的一些底层细节信息。
微软已经在今年3月举办的IETF 83大会上提交了其提案。他们还实现了一个开源的概念验证原型,可以让开发者评估HTTP Speed+Mobility提案,项目代码位于GitHub上。
至于业界会选择哪一个来实现还不明朗。根据IETF标准进程,“规范要经历一个开发期、经过Internet社区的几轮审查并根据体验进行修订、然后被恰当的组织采纳为标准、最后发布”。
查看英文原文:Google and Microsoft Want to Improve HTTP