0. 世界上第一個網站 1990年12月20日,這一天對於現在的互聯網來說意義非凡。歐洲核子研究組織(CREN)的科學家Tim Berners-Lee在一臺NeXT電腦上啟動了世界上的第一個網站(當然當時僅能Tim Berners-Lee自己訪問),這臺電腦至今仍保留在CREN,但當年那個網站已經不 ...
0. 世界上第一個網站
1990年12月20日,這一天對於現在的互聯網來說意義非凡。歐洲核子研究組織(CREN)的科學家Tim Berners-Lee在一臺NeXT電腦上啟動了世界上的第一個網站(當然當時僅能Tim Berners-Lee自己訪問),這臺電腦至今仍保留在CREN,但當年那個網站已經不復存在了。鑒於這個網站的意義重大,CREN在2013年“復刻”了這個網站,並指向了原來的網址:http://info.cern.ch/。由於現在的瀏覽器早已不是當初的樣子,所以CREN還提供了一個模擬器來模擬當時瀏覽這個網站是什麼情形(http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html),打開後如下:
哈哈,看起來是不是很酷炫的樣子。
1. Hypermedia
我們註意看它的第一句話:
The WorldWideWeb (W3) is a wide-area hypermedia information retrieval initiative aiming to give universal access to a large universe of documents.
大意是說www是一個為了讓全世界都能訪問大量文檔的一個的超媒體信息檢索計劃,其中重點在於其提到的hypermedia。我們看看它怎麼解釋hypermedia是什麼的:
Hypertext is text which is not constrained to be linear.
Hypertext is text which contains links to other texts. The term was coined by Ted Nelson around 1965 (see History ).
HyperMedia is a term used for hypertext which is not constrained to be text: it can include graphics, video and sound , for example. Apparently Ted Nelson was the first to use this term too.
Hypertext and HyperMedia are concepts, not products.
其中解釋了什麼是hyperhtext(包含link的文本內容),又指出了hypermedia是一個術語,不僅僅指代hypermeida,還可以包括一些圖像,視頻,聲音等等。hypertext這個術語名字並不是由Tim Berners-Lee提出的,而是在更早的1965年由Ted Nelson第一次提出這個概念(hypertext歷史)。不知道大家對於hypertext這個詞是不是感覺很熟悉的樣子,大名頂頂的HTML(HyperText Markup Language)就是它的一個具體實現。hypertext中的link一直是重中之重,試想如果沒有這樣一種機制把各種文檔聯繫起來,那麼孤零零的一些文本內容是如何也不會發展出後來的互聯網的。
hypermedia是web中的重中之重的一個角色,可以說沒有它就沒有今天的web。
2. HTTP歷史的簡單回顧
具體的HTTP協議最早是版本0.9,發佈與1991年(HTTP 0.9 https://www.w3.org/Protocols/HTTP/AsImplemented.html)。從現在的角度看可以說是一個很簡陋的協議,只支持GET請求,無request header,所以只能用來展示靜態文本內容,不對對於當時來說已經足夠了,畢竟當初Web建立的初衷僅僅是為了在這些科學家之間共用文檔信息用的。
隨著Web的迅猛發展,只讀的HTTP 0.9已經無法滿足Web的胃口了。在1996年HTTP 1.0誕生,最突出的改進在於支持POST來寫數據了(基於HTML表單,HTML最初的標準誕生於1993年),使得Web終於“活了”起來。在HTTP 1.0協議的專家組中,有一個年輕人脫穎而出,後來成為了HTTP/1.1協議專家組的負責人。這位年輕人就是Apache HTTP伺服器的核心開發者Roy Fielding,Apache軟體基金會的合作創始人,也是URI協議的主要設計者,同時也參與了HTML的設計。
在1999年,Tim Berners Lee和Roy Fielding以及HTTP1.1專家組發佈了HTTP 1.1版本,主要是對1.0的一些多餘的設計做了一些精簡和優化,比如我們現在可以在一臺機器上部署多個網站,而用不同的host請求頭來區分,而這個host請求頭是在1.1才引入的。1.0的時候HTTP協議對網站的假設是基於一個IP對應一個網站,從來沒有料到後來的一個ip會部署這麼多個web站點。
HTTP 1.1從1999年至今堅挺了18年,隨著越來越豐富富龐大的web,性能有點跟不上去了。後來Google搞了一個SPDY協議,在TCP和HTTP之間增加了一層,重點在於提示傳輸性能和增加安全性,但是卻強制了採用TLS。後來制訂了新版的http2,移除了強制TLS的要求,至於為什麼,原因很簡單,這個要求違反了REST的架構約束,至於違反了哪些約束,後面的博客會解釋。
3. REST的誕生
在上面我們提到一個人:Roy Fielding,他在和他的同事們在HTTP/1.1協議的設計工作中,對於Web之所以取得巨大成功,在技術架構方面的因素做了一番深入的總結。Fielding將這些總結納入到了一套理論框架之中,然後使用這套理論框架中的指導原則,來指導HTTP/1.1協議的設計方向,HTTP/1.1協議的第一個草稿是在1996年1月發佈的,經過了三年多時間的修訂,於1999年6月成為了IETF的正式規範。用來指導HTTP/1.1協議設計的這套理論框架,最初是以備忘錄的形式在專家組成員之間交流,除了IETF/W3C的專家圈子,並沒有在外界廣泛流傳。
Fielding在完成HTTP/1.1協議的設計工作之後,回到了加州大學歐文分校繼續攻讀自己的博士學位。第二年(2000年)在他的博士學位論文Architectural Styles and the Design of Network-based Software Architectures中,Fielding更為系統、嚴謹地闡述了這套理論框架,並且使用這套理論框架推導出了一種新的架構風格,並且為這種架構風格取了一個令人輕鬆愉快的名字“REST”——Representational State Transfer(表述性狀態轉移)。在這篇論文中,Fielding認為Web得以蓬勃發展的原因很大程度上得益於Web的架構設計滿足了互聯網規模的分散式超媒體系統的需要。而他總結整體推導出來的REST,正是Web的架構風格。
本篇先開個頭,簡單介紹一下web的歷史,以及REST是怎麼來的,乾什麼用的。後面會逐一解釋什麼筆者眼中的REST是什麼,歡迎有興趣的前來討論。
參考資料
世界上誕生的第一個網站:http://info.cern.ch/
世界上誕生的第一個網站-模擬器:http://line-mode.cern.ch/www/hypertext/WWW/TheProject.html
Web的生日:http://home.cern/topics/birth-web
HTTP 0.9 :https://www.w3.org/Protocols/HTTP/AsImplemented.html
HTTP 歷史:https://www.w3.org/Protocols/History.html
HTTP 1.1 : https://www.ietf.org/rfc/rfc2616.txt
理解本真的REST:http://www.infoq.com/cn/articles/understanding-restful-style/
Tim Berners Lee :https://en.wikipedia.org/wiki/Tim_Berners-Lee
Roy Fielding:https://en.wikipedia.org/wiki/Roy_Fielding
Roy Fielding談Google SPDY協議:http://www.infoq.com/cn/news/2012/07/roy-on-google-spdy
架構風格與基於網路應用軟體的架構設計(中文修訂版):http://www.infoq.com/cn/minibooks/web-based-apps-archit-design