天天看點

XMLHTTP的故事

譯文

在離開微軟之後(譯者注: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參與翻譯。

繼續閱讀