XMLHTTP的故事

来源:互联网 发布:人力资源 源码 编辑:程序博客网 时间:2024/05/17 17:57

译文

在离开微软之后(译者注:Alex现在已回到微软担当资深开发主管),回顾往日参与的项目,有一个值得与大家分享的就是XMLHTTP的历史了。

XMLHTTP已经成了一个非常成功的产品。Google早在开发GMail的时候就使用了它,但Gmail的代码过于复杂,没多少人能看得懂。后来是Google Suggest把它带进了人们的视线。许多人研究了Google Suggest的源代码之后领悟了它的神奇之处。从那以后,XMLHTTP和AJAX技术在华尔街日报、CNET以及其它许多新闻中被提到。事实上,GMail的客户端只是沿用了类似于Exchange 2000中Outlook Web Access(OWA)的设计,后者是一个在2000年左右发布的基于IE5的产品。

其实XMLHTTP是在Exchange 2000的研发团队中诞生的。我于1996年11月加入微软,在1997年的春天我被调到了总部雷蒙德 (Redmond) 并开始做一些关于互联网标准的事情,那些工作涉及到Outlook的未来发展。我当时做的事情和网站的元数据有关,比如我提出了一个名为“网络集合(Web Collections)”的设想。突然有一天Thomas Reardon把我叫出来,向我介绍了一个人叫做Jean Paoli的人。Jean当时刚刚进公司,在做一个叫XML的新东西,有些人隐约感到它将来必定会大放异彩,只不过没人说得出具体所以然来。在领会了XML的精神之后,我把它容纳到我的提案中,并把提案名改成了“使用XML的网络集合(Web Collections using XML)”,然后公开递交给了W3C。现在回想起来,那其实是一个相当尴尬的提案,但我又能说什么呢——当时“推”可是网络上最热门的技术呢!据我所知,这是最早的和XML有关的公开文档。

那个提案使我结识了一些正在开发WebDAV标准的同事。我花了很多力气力荐WebDAV使用XML作为数据传输格式。不久以后我加入了Exchange 2000团队去领导微软的WebDAV服务器的开发。当时WebDAV服务器可以基于使用文件系统的普通IIS(即DAVFS),也可以基于Exchange数据(即DAVEX)。

我记不清具体我是什么时候开始参于Exchange 2000中OWA的开发的了。也午那是在我加入团队的一年之后,大约1998年的下半年吧。无论如何,我们当时已经完成了Exchange 2000 (开发代号Platinum)的一个或两个里程碑(Milestone),并且小心翼翼地避免触及OWA中的问题。老版本的OWA由于开发匆忙存在不少问题,服务器在可扩展性和性能上都有着缺陷。

后来Brian Valentine(当时Exchange团队的总经理)问我们,打算怎样处理Exchange 2000中的OWA。当时有两个解决方案,一个是使用纯HTML制作高效简洁的网页,另一个是使用DHTML做一些很酷的界面。当我第一次看到Jim Van Eaton和Bob Gering所做的演示之后,我完全被吸引了。可惜,他们当时的演示仅仅是把修改过的表单发送回服务器,与老版本的OWA一样有扩展性和动态数据的问题。

就在那个周末,我打开Visual Studio,捣鼓出了XMLHTTP的雏形。最初的版本很粗糙,而且不支持异步模式,但它足以加快Jim和Bob在DTHML架构的OWA上的开发进度,完成与Exchange 2000的WebDAV/XML通讯。

用这个超酷的组件与服务器对话是一回事,把这个组件发布出去又是另一回事。Outlook Web Access的设计理念是让用户能通过任何一台装有浏览器的计算机收发邮件,如果我们把这个组件设计为一个需要下载并安装的ActiveX控件,难免违反这一设计初衷。所以,我们盯上了Internet Explorer浏览器,希望与之一起发布。

首先我让OWA组的Shawn Bracewell接手这个组件并提高代码的质量。Shawn是个聪明的家伙,他很快改写了原有代码,并加上异步操作以及错误处理等特性。

此时,IE距离beta 2仅仅几周的时间了,而beta 2又是正式发布前最后一个测试版本。以前我们经常在软件发布前匆忙地把新特性硬生生挤进产品中,可是这次我并不走运。好在我又意识到MSXML库随IE一起发布,而且我在那里还有几个朋友——我立马与负责MSXML小组的Jean Paoli取得了联系,并决定把我的组件随MSXML发布。这也很好地解释了XMLHTTP这个名字的由来——虽然这个组件本质上主要和HTTP打交道,而XML只是被支持的格式之一,不过为了傍上MSXML,索性在名字中添加上了XML(哦,XML在当时可以当红的技术,所以取这个名字对于市场推广也有好处)!

当Shawn 与XML组的Chris Lovett忙着集成XMLHTTP的时候,我与负责IE的Joe Peterson签订好了发布协议。我们快速审阅了安全性,不过当时我们并没有意识到个组件可能带来的安全隐患。我们在beta版本持有的理论是:除了OWA没有人会使用这个组件,所以即使发现了软件缺陷,最坏的情况也就是我们用不了这个组件而已(没有其它客户)。在beta正式发布前的一周我们提交了代码、编译出可执行文件,经过测试,一切似乎都很不错。

IE5 beta发布以后,OWA组终于可以使用这个测试版继续他们的开发了。不过Shawn却不得不忙于修复XMLHTTP的缺陷直到IE5正式发布。事实上Exchange 2000又花了一年半才发布。真是无心插柳柳成荫,提前一点规划,没想到当正式产品发布的时候,XMLHTTP已经被广泛采纳并获得了成功。

除了上文提到的名字外,XMLHTTP的发布还得到了别人的帮助(我确信我忘记了一部分值得提到名字)。Karim Battish和Sean Lyndersay帮忙更新了软件规范文档(虽然是在产品实现以后才补上的文档,不过有时候事实如此)并且负责与其他团队合作。Chris Tyner在测试方面至关重要——没有他的热忱与坚持,XMLHTTP或许会漏洞百出。

如果我没有记错的话,Chris还写过一个重量级的网页程序,它可以发送任意的HTTP请求。我记得那个工具的名字叫做DAVUI,提供了几乎全部常用的HTTP 1.1指令、WebDAV以及特殊的Exchange请求。与通常的Win32可执行文件不同,你可以把这个.htm文件随便复制到任何一台计算机甚至是远程访问,它都可以正常工作。太神奇了! 

从这件事中我得出的结论是,要懂得发布的重要性,以及要有等待它慢慢成功的耐心。有时候媒体(甚至是内心)衡量Avalon是否成功的标尺就是在发布之日有多少应用程序采纳了这种技术。这种想法简直是太疯狂了——要知道这之间的变化之大,观念改变、学习以及部署的时间之长。我坚信如果微软明年就发布Avalon,而且业界也力挺,那么五年之内该技术将无所不在。不过,在里程碑到来之前,我们必须假以时日。

这就是在微软工作的一个优点,我也希望这将持续下去:眼光放远,有决心和能力坚持到技术真正成为主流。而创业公司不得不经常妥协并快速发布。

我现在也忙活着一些在线应用程序,比如基于AJAX的缩放操作的飞机照片库,以及支持日历事件同步的calendardata.com。

原文:http://www.alexhopmann.com/xmlhttp.htm
作者:Alex Hopmann

译者感悟

  1. 实际应用催生创新技术。无论是昨天.Net抑或今天的Cloud,没有一个是闭门造车出来的。XmlHttp填补了网页应用中网络传输的功能空缺,可以创造巨大的应用比如今天的Live Mail、GMail等。即使微软不创造,也会有X软、X歌创造。不过当时微软正在做OWA而抢占了先机,洗具了。
  2. 掌握标准。微软创造了这个技术,不过却是谷歌将之发扬光大,而今天又被Opera和Mozilla领导了最新的规范。微软实现了最先的模型,编程接口也被容纳到最新的规范中,不过最新的规范加入新的特性,反而显出微软的技术“没有兼容国际规范”。先发而后至,杯具了。
  3. 前沿技术有更大的创新机会。哪些是今天的前沿技术?就微软这块技术而言,SharePoint、Bing、Windows Phone、Azure。不相信我可以,总要相信Peter Spiro吧?
  4. 小心技术上的一失足成千古恨,特别是起名字。出于攀亲戚的缘故XmlHttp当年得了这样一个名字,可是连W3C规范上来就是一句:该技术与XML并无必然关系,特别鄙视X软乱起名字而全世界的挨踢精英们今天只得将错就错……

感谢Shuhai Shen - http://leonax.net参与翻译。