BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

Roy Fielding谈Google SPDY协议

| 作者 李锟 关注 6 他的粉丝 发布于 2012年7月3日. 估计阅读时间: 11 分钟 | CNUTCon 了解国内外一线大厂50+智能运维最新实践案例。

2010年8月,HTTP协议的原创作者Roy Fielding接受了“Geek of the Week”栏目记者Richard Morris的采访,其中有很长一段内容涉及到了Google的SPDY协议。Fielding对于SPDY协议提出了一些批评意见:

  • 改善网络延迟问题的最佳途径是使用缓存,SPDY改善网络延迟的做法,从协议开发的角度来说是短视的。
  • 除非SPDY协议能够像HTTP那样非常好地支持分层的缓存机制,才有可能取代HTTP协议。然而,SPDY协议设计者的兴趣似乎更多地局限于其他方面,例如强制要求加密和建立穿越中间组件的隧道。如果这个趋势延续下去,仅仅那些需要认证服务的开发者会对SPDY协议感兴趣。在那些场景中,他们不想共享缓存,并且能够支付的起每个客户端保持长时间连接所需要的基础设施费用。
  • SPDY协议目前的设计无法很好地支持分层的服务注1(layered services)。换句话说,中间组件很难看到消息内容,并且快速判断请求应该由哪个服务器来处理。而支持分层服务,对于所有的互联网规模(Internet-scale)的服务来说都是必不可少的。他怀疑Google的运维人员已经在教育这些工程师相关的经验教训了。如果在不远的未来,SPDY协议的设计发生大的改变,他一点也不会感到奇怪。

不过Fielding也承认,HTTP/1.1的线路语法注2(wire syntax)中存在很多低效率的部分,HTTP/1.1肯定会被某种类似HTTP+SPDY的协议所取代。事实上他在2001年就开始了相关的努力,开发了一个叫做WAKA的新协议,但是并没有选择在IETF/W3C内部来开发。

2012年3月底,在W3C的邮件列表中,有一个标题为“SPDY = HTTP/2.0 or not ?”的讨论。这个讨论有很多人参与,值得关心HTTP协议发展方向的同学们仔细一读。在这个讨论中,Roy Fielding与SPDY协议作者Mike Belshe阐述了各自针锋相对的观点。Mike Belshe在他的第一次发言中提到:

我们现在正处在一个十字路口,需要做出重要的抉择。
[..]请你们去满世界寻找到哪怕只有一个人,他想要一个不安全的互联网。我不相信世界上存在这样的用户。大多数用户没有意识到他们所使用的互联网是不安全的。我知道很多网站为了节省开支,甘愿让用户冒风险。我们究竟应该迎合这些网站呢,还是应该迎合用户?
[..]在任何产品中,安全性都不是一个选项,而是一个必需品。用户期望安全性,并且需要安全性。

接下来他还提到两点,借以证明SSL可以,也有必要称为“必需品”:

  • CPU的成本在持续下降,摩尔定律使得应用SSL即使在廉价的硬件上也是可行的。如果网站甘愿让用户冒风险(如果你们来问我,我会认为这是完全不负责任的行为),那么继续使用HTTP/1.1好了。未来的互联网应该是安全的。
  • 除非我们使得SSL成为一个必需品,而不是一个选项,否则SSL实现的性能将会一直低于标准。这是一个自我实现的预言,现在的SSL实现之所以很慢,正是因为我们没有尝试严肃地看待它们。

他补充道:

如果你们不相信我所说的安全性的重要性,请看看所有主要的社交网站内容提供商。Google和Twitter已经100%使用了SSL,Facebook和Microsoft也没有落后多少。用户需要安全性,他们现在就需要!我们应该停止将安全性作为一个选项的讨论。
一个更好的争论话题应该是:“SSL是否是保护Web的正确方式?”而不是:“我们是否应该保护Web?”

Roy Fielding在发言中提到:

我从不认为应该将SSL作为保障协议安全的必要手段。SSL虽然有助于对被动的观察者隐藏数据交换的内容,但是传统的User Agent证书管理方式对于保证协议安全来说其实是有欠缺的。

Fielding质疑“在任何时候,每一个用户都想要一个安全的协议”这个观点是不切题的。他指出,在实践中有很多使用HTTP的例子,开发者既不想用SSL/TLS,也不适合使用SSL/TLS。同样的,很多人在亭子间、公立学校、图书馆和其他区域使用HTTP,SPDY设计者所认为的用户对于隐私问题的关注,其实不如该区域所属组织对于防止HTTP协议被滥用的责任更重要注3

其实还有其他的方法既可以保证协议安全,又能保证协议对于中间组件的可见性,但是我们不必预先就同意安全性是一件“必需品”。如果协议的前提无法支持自己并自圆其说,那么我不需要一个新的协议。

Mike Belshe回应了Roy Fielding的言论:

实际上,我没见过哪个例子能证明用户想要一个不安全的产品或者协议。我们当然无法解决所有的问题,但是这不意味着我们能对其置之不理。我们现在已经能够解决大多数的偷听问题(eavesdropping problem)了。所以问题在于:为何我们不应该去做这件事情? [..] 协议只有在提供了真正的价值时才会成功。这里有一个主观的问题是,安全性和隐私保护是否是价值的一部分。

笔者点评:

在“SPDY = HTTP/2.0 or not ?”这个大讨论中,Mike Belshe并没有完全理解Roy Fielding的观点,甚至有些抵触。笔者怀疑Roy Fielidng在2010年“Geek of the Week”访谈中对SPDY协议的批评让他很不满,因为Fielding甚至怀疑Mike Belshe没有做运维的经验(特别是高可伸缩性网站架构的设计和实践的经验),需要Google做运维的同事给他上上课。

总的说来,Fielding的批评还是比较中肯的,考虑问题也更加全面。因为设计一个像HTTP这样的Web基础协议,除了安全性之外,还有一些同样重要的考量,例如可伸缩性,甚至还需要考虑一些社会性方面的问题。在安全性、可伸缩性、社会性等方面的考量,常常存在着冲突,无法兼顾,在每一方面都要达到完美的境界,因此需要非常慎重地加以权衡。这些权衡,Fielding已经很清楚地写在了他于2000年所发表的博士论文之中。正是在这篇博士论文中,Fielding通过讨论架构风格所要满足的架构约束,严谨地推导出一种专门为面向互联网的Web应用量身定制的架构风格——REST。

笔者推测Mike并没有认真读过这篇论文,不然他应该能更容易地理解Fielding和IETF/W3C中一些其他专家的观点。REST要满足的一个非常重要的架构约束就是“分层系统”(Layered System)。HTTP/1.1协议为何如此设计,背后的指导原理正是REST。HTTP/1.1协议有一个很重要的目标就是支持分层系统的架构设计(常见的分层系统例如分层的缓存、分层的代理服务器、分层的防火墙等等)。分层系统要求整个系统实现统一接口,保持HTTP消息的语义对于中间组件具有可见性。

而SPDY协议因为强制使用SSL,只支持端到端(User Agent到Origin Server)的密钥协商和通信,将参与到HTTP通信链路之中的其他中间组件(缓存、代理服务器、防火墙等等)完全排除,因此无法满足“分层系统”的架构约束。SPDY协议最大的问题就在于此,引起争论最多的正是强制使用SSL,这会给协议的部署工作带来很多麻烦。其实还有其他的方法,在满足“分层系统”架构约束的情况下,解决安全性的问题。

如果网站已经大量使用了SSL,例如国内像支付宝、网上银行一类的网站,那么可以将SPDY协议作为一种优化的HTTPS实现。这样做不会有什么问题,部署起来难度也不算大。但是如果网站没有大量使用SSL,选择SPDY协议时需要非常慎重。

SPDY协议中确实有很多值得借鉴的地方,其团队也才华横溢。但笔者认为SPDY协议不大可能在未来直接取代HTTP/1.1,认为SPDY协议就是未来的HTTP/2.0,要么是夸大其词,要么是故意的市场炒作。事实上,IETF的HTTPbis工作组的主要工作,正是对HTTP/1.1协议进行重新评估和改造,欲了解他们的工作成果,可以访问其官方Wiki。他们已经将HTTP/1.1协议模块化,划分成了7个模块:


(图片源自:http://restlet.files.wordpress.com/2011/10/http-1-1-bis.png?w=460

估计在大约两年之内,IETF将会发布一个HTTP/1.1协议的修订版(但不是传说中的HTTP/2.0协议)。SPDY协议中多路复用、头信息压缩、设置请求优先级的做法可能会被最基础的Messaging模块所借鉴。但是强制使用SSL,以及SSL是否就是解决Web安全性问题的正确选择,在IETF/W3C仍然受到广泛的质疑。笔者认为在可预期的未来,强制使用SSL不可能成为HTTP协议的一部分。

各位读者朋友,您又是如何看待SPDY协议的呢?


注1:“分层系统”是REST所要满足的一个架构约束,常见的分层系统有分层的缓存、分层的代理服务器、分层的防火墙等等。

注2:就是一些标准头信息的语法。

注3:考虑一下恐怖分子在这些区域散布恐怖信息。

作者李锟,网名dlee,知名技术专家,出版过《REST实战》《Ajax实战》等多部译作。


感谢丁雪丰对本文的审校。

给InfoQ中文站投稿或者参与内容翻译工作,请邮件至editors@cn.infoq.com。也欢迎大家通过新浪微博(@InfoQ)或者腾讯微博(@InfoQ)关注我们,并与我们的编辑和其他读者朋友交流。

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

ssl by 白 联

时间证明了现在ssl的必要性

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

1 讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT