從技術(shù)層面來說, 互聯(lián)網(wǎng)是比較難以理解的事情, 主要是因?yàn)樗且粋€(gè)觸摸不到的東西. 多數(shù)人都從個(gè)人角度對(duì)它有一個(gè)大致的印象, 但對(duì)更深入去理解就興趣缺缺了. 盡官如此,網(wǎng)絡(luò)還是比較容易被定義的, 并且定義網(wǎng)絡(luò)有助于我們更好的就解說http這個(gè)重要角色.
如果你去創(chuàng)建一個(gè)像網(wǎng)絡(luò)這樣的溝通媒介, 假定現(xiàn)有計(jì)算機(jī)網(wǎng)絡(luò)(因特網(wǎng))有三個(gè)主要問題需要你去解決,以便于潛在用戶使用:
1. 用戶該怎樣查找內(nèi)容, 或者說內(nèi)容提供者怎樣確定自己?
2. 用戶在這個(gè)系統(tǒng)下查找時(shí)如何檢索內(nèi)容, 或者說內(nèi)容提供者如何發(fā)送內(nèi)容?
3. 內(nèi)容需要以什么樣的格式提交才能讓所有的用戶一致解析?
在網(wǎng)絡(luò)情境下這三個(gè)問題的解答依次是: 通用資源標(biāo)識(shí)符(Universal Resource Identifiers)簡(jiǎn)稱URIs, 超文本傳輸協(xié)議(Hypertext Transfer Protocol)簡(jiǎn)稱HTTP, 和超文本標(biāo)記語言(Hypertext Markup Language)簡(jiǎn)稱HTML.
很多網(wǎng)絡(luò)開發(fā)人員對(duì)這三個(gè)技術(shù)中的HTML都有了一定的知識(shí)積累. 當(dāng)只需要?jiǎng)?chuàng)建靜態(tài)內(nèi)容,比如個(gè)人主頁時(shí)是已經(jīng)足夠了. 然而, 如果需要?jiǎng)?chuàng)建動(dòng)態(tài)內(nèi)容, 特別是需要構(gòu)建web應(yīng)用時(shí),學(xué)習(xí)HTTP知識(shí)就變得非常重要了. 因?yàn)樵谶@種情況下,數(shù)據(jù)和信息比格式化信息方式更加重要.
以銀行站點(diǎn)為例, 一個(gè)站點(diǎn)用戶是更關(guān)心儲(chǔ)蓄帳戶收支呢還是更關(guān)心儲(chǔ)蓄帳戶收支數(shù)據(jù)有沒有以更具美學(xué)的方式展示呢? 為了開發(fā)出更有用更成功的網(wǎng)站, 把目光聚集在用戶對(duì)什么更感興趣就顯得非常重要, 在多數(shù)情況下的答案是內(nèi)容.
因?yàn)橹赜趦?nèi)容和內(nèi)容的傳遞, 本書對(duì)專業(yè)網(wǎng)絡(luò)開發(fā)就這些方面做了細(xì)致的介紹.
HTTP簡(jiǎn)史和用途
為了解HTTP發(fā)展歷程, 要適當(dāng)了解我們所熟知的網(wǎng)絡(luò)是如何開始的. HTTP曾是一個(gè)叫做Tim Berners-Lee腦子里的一張巨大圖片. 事實(shí)上, HTTP就是為了實(shí)現(xiàn)網(wǎng)絡(luò)的想法而設(shè)計(jì)的.
1989年三月,? Berners-Lee 向CERN(歐洲核研究組織)提交了一個(gè)倡議書, 定名為:信息管理倡議書. 這個(gè)倡議書被大多數(shù)發(fā)明互聯(lián)網(wǎng)的代表們支持. 雖然這個(gè)倡議書只是做了大至的概括而沒有具體實(shí)施細(xì)節(jié),但它確實(shí)對(duì)這個(gè)改變世界遠(yuǎn)景的發(fā)明定義了關(guān)鍵概念.? Berners-Lee在1991年8月就萬維網(wǎng)在新聞組做了宣言. 現(xiàn)在還能在谷歌組織查找到這個(gè)宣言原文: http://groups.google.com/groups?selm=6487%40cernvax.cern.chhttp://groups.google.com/groups?selm=6487%40cernvax.cern.ch
下面是關(guān)于網(wǎng)絡(luò)的里程碑事件及時(shí)間點(diǎn):
1989年3月------ Tim Berners-Lee寫下信息管理倡議書.
1991年8月------?Tim Berners-Lee就萬維網(wǎng)做出宣言.
1993年3月------ Marc Andreesen 發(fā)布NCSA Mosaic 0.10 (網(wǎng)絡(luò)瀏覽器), 它支持<img>標(biāo)簽, 書簽以及在X下更友好的圖表接口支持.
1993年9月------ NCSA 為X\Macintosh\PC適配Mosaic.
1994年3月------Marc Ajndreesen和其同事們離開NCSA, 創(chuàng)立了Mosaic Communications Corporation(即后面的Netscape).
1994年6月------ Brian Pinkerton發(fā)布 WebCrawler, 一個(gè)網(wǎng)絡(luò)索引.
1994年8月------ Jeff Bezos 為亞馬遜招兵買馬.
1994年10月------ Marc Andreesen發(fā)布Mosaic Netscape 0.9 Beta.
1994年10月------?Tim Berners-Lee創(chuàng)立萬維網(wǎng)委員會(huì)(W3C).
1994年11月------ W3C第一個(gè)會(huì)議在MIT舉行.
1995年9月------ eBay創(chuàng)辦廣告拍賣服務(wù).
1998年3月------ 谷歌成立.
你可以疑惑HTTP是如何適應(yīng)網(wǎng)絡(luò)在這么些年來的快速發(fā)展的, 因?yàn)樽铋_始它只是一個(gè)允許定位及檢索內(nèi)容的非常簡(jiǎn)單的協(xié)議, 是遠(yuǎn)遠(yuǎn)不能滿足現(xiàn)今商業(yè)應(yīng)用的類型需求的. 跟工業(yè)進(jìn)化一樣, HTTP也在不斷演進(jìn).
HTTP 0.9
第一版的HTTP極其基礎(chǔ)(簡(jiǎn)陋). 它允許網(wǎng)絡(luò)客戶端用GET方式請(qǐng)求內(nèi)容, 沒有HTTP 請(qǐng)求頭(header), 也沒有HTTP版本號(hào). 請(qǐng)求里就只有一行字: GET/index.html
因?yàn)樵贖TTP 0.9版里沒有請(qǐng)求頭,所以它只支持一種類型的內(nèi)容,那就是純文本. 當(dāng)然, 文檔依然可以用HTML格式, 但它沒有媒體類型用以支持使用圖片及其它類型的內(nèi)容. 當(dāng)然可以說這個(gè)版本非常之基礎(chǔ), 但也完成了預(yù)期目的.
http 0.9事務(wù)中的基本系列事件由正在建立的tcp連接組成, 一個(gè)像上面例子中的請(qǐng)求發(fā)送以后, 內(nèi)容將被返回(如果內(nèi)容存在). 其中也沒有提及到錯(cuò)誤碼的情況, 如果內(nèi)容不存在則沒有內(nèi)容返回, TCP連接在內(nèi)容返回后關(guān)閉(如果有內(nèi)容返回的話).
盡管后續(xù)版本都要求向前兼容, 但大多數(shù)現(xiàn)代網(wǎng)絡(luò)客戶端和服務(wù)器僅能夠與HTTP 1.0以上的版本通信.
HTTP 1.0
由于HTTP 1.0 在網(wǎng)絡(luò)出現(xiàn)的早期就已經(jīng)推出(RFC可以追溯到1996年), 很多人從沒在http 0.9 的約束下使用網(wǎng)絡(luò). 我最早對(duì)網(wǎng)絡(luò)的記憶是使用Lynx 網(wǎng)絡(luò)瀏覽器瀏覽內(nèi)容, 它不支持圖形交互界面, 圖片以及使用鼠標(biāo)瀏覽.當(dāng)HTTP大規(guī)模采用時(shí), 這個(gè)階段發(fā)展迅猛, 網(wǎng)絡(luò)的潛力開始清晰起來.
HTTP 1.0最令人矚目的區(qū)別在于, 至少對(duì)于用戶來說,網(wǎng)絡(luò)已經(jīng)有能力以HTML表單的形式向用戶發(fā)回?cái)?shù)據(jù). 這個(gè)要?dú)w功于POST方法的加入,我將在第二章的HTTP定義中講解.