前段時間在微博上看到有人問,前端這幾年發展這麼迅猛,各類新技術、新框架層出不窮,咱們究竟怎麼學習這些新技術才能跟得上腳步,畢竟精力有限,逐個學習不現實。我的認爲,沒有太大的必要去追逐那些新潮的技術。緣由有二。無論目前前端再怎麼發展都離不開JavaScript、HTML和CSS這三個基本要素,就像目前不管計算機如何發展都逃不脫圖靈機和馮·諾依曼模型同樣。若是連最基本的JS、HTML和CSS都尚未掌握,何談技術框架,不過花拳繡腿而已。任何一種技術都有它產生的緣由,或者說要解決的問題。只有瞭解了技術背後的東西才能瞭解技術自己,進而運用自如。
因此,既然從事了前端開發,就不能不去了解下web的歷史。懶得本身整理了,如下部分摘自51CTO的在線電子書《Web之困:現代Web應用安全指南》,雖然該書側重於Web安全方面,可是下面的摘錄也足夠簡單瞭解Web的歷史了。想要了解更多關於Web安全額信息,請移步《Web之困:現代Web應用安全指南》查閱。前端
計算機歷史學家們都常以美國科學家Vannevar Bush3在1945年虛構出來的一臺名爲Memex的桌面設備做爲Web理念最先期的原型。Memex 用於在微縮膠捲上建立和標註跨文檔連接,並按照這些連接而跳轉切換到所引用的其餘微縮膠捲上,使用方式大略相似於咱們如今的書籤和超連接。Bush 大膽推測這種簡單的功能將革命性地改變知識管理和數據挖掘的前景(使人莞爾的是,直到20世紀90年代初期,偶爾還有人以爲這種想法是愚笨且天真好笑的)。但當時並無任何實際可用的設計,所以那時候它還僅是個充滿將來憧憬的願景而已,直到晶體管計算機登上了歷史舞臺的中心,一切纔可能成真。web
20世紀60年代是下一個歷史裏程碑。這時候誕生了IBM的GML(Generalized Markup Language,通用標記語言),它用可供機器讀取識別的指令做爲文檔的標識符,以標誌每段文本的功用,能夠明確地指明「這裏是文檔的頭部」,「這裏是幾個列表項目」諸如此類。在此後通過20多年的發展,GML(一開始只是用在一些IBM笨重大型機的文本編輯器裏)逐漸演變成SGML(Standard Generalized Markup Language,標準通用標記語言)。SGML語言更通用靈活,它把GML原來基於冒號和句號的笨拙語法,改爲了咱們熟悉的尖括號格式的語法。數據庫
在GML進化到SGML的過程當中,計算機也愈來愈強大和用戶友好。幾位研究人員開始試驗Bush的跨連接概念,把它運用到計算機的文檔存儲和檢索上,看是否能夠基於某些關鍵字對一大堆文件進行交互索引。富有探索精神的各家公司和大學也推出了各類先驅型項目,如 ENQUIRE、NLS和 Xanadu,但這些項目中的大多數都失敗了,未能產生持續的影響。這些項目的共同問題包括可用性過低,過於複雜,可擴展性差等。編程
歷經10年以後,兩位研究人員,Tim Berners-Lee 和Dan Connolly 開始尋找新的跨域引用方案—這個方案必須很是簡潔明瞭。他們先草擬了HTML(HyperText Markup Language,超文本標記語言)規範,這是一套繼承自SGML的精簡版語言,特別針對帶超連接和簡單格式的文檔進行了設計。在HTML方案以後,他們又進而開發了HTTP協議(HyperText Transfer Protocol ,超文本傳輸協議),這是一套利用當時已有的IP地址、域名和文件路徑等概念,專用於訪問HTML資源的很是基礎的協議。他們研究工做的總成果就是這個誕生於 1991~1993之間由Tim Berners-Lee開發的World Wide Web 程序(如圖1-1所示),這個最原始狀態的瀏覽器能夠解析HTML文件,還能夠把用戶提交的數據顯示出來,而且只須要點擊一下鼠標,就能夠在不一樣頁面之間切換瀏覽。
小程序
與其餘心懷高遠目標的競爭項目相比,不少人都以爲HTTP 和HTML 的設計簡直是個巨大的倒退。畢竟,不少早期的構想都鼓吹本身包含數據庫整合、安全和數字版權管理,或者整合了內容編輯和出版;即便Berners-Lee本身的另外一個早期項目ENQUIRE看起來格局也更大一些。然而,由於HTTP和HTML的門檻低,即時可用,擴展性不受限制(正好與那時計算機的運算能力愈來愈強,價錢更爲人接受,互聯網也開始普及的時機相吻合),原先絕不起眼的WWW項目忽然演變成一波熱潮。跨域
好吧好吧,這裏的「熱潮」是以20世紀90年代的標準來講的。很快,在互聯網上就涌現出了10多種的Web服務器。到了1993年HTTP已經佔美國科學基金會(National Science Foundation)骨幹網總流量的0.1%。在同一年,Mosaic瀏覽器登場了,它由美國伊利諾伊大學(University of Illinois)開發,是第一款普遍使用的、成熟的Web瀏覽器。Mosaic 擴展了原先World Wide Web 的代碼,增長的功能包括:在HTML文檔裏添加內嵌的圖像,經過表單提交數據,奠基了今天交互式和多媒體應用的基礎。瀏覽器
Mosaic使網頁瀏覽變得更美觀,也令使用者更容易接受Web方式。在20世紀90年代中期,Mosaic仍是另外兩個瀏覽器的基礎:Mosaic Netscape(後來更名爲Netscape Navigator)和Spyglass Mosaic(後來被微軟收購併更名爲Internet Explorer)。同時還有好幾種非Mosaic引擎的同類競爭產品,包括Opera和其餘幾個基於文本的瀏覽器(例如, Lynx 和w3m)。很快,互聯網上出現了第一個搜索引擎、在線報紙和約會網站。安全
到20世紀90年代中期,很明顯Web已經站穩了腳跟,用戶也願意爲它放棄許多老舊的技術。此時儘管桌面軟件巨鱷微軟公司先前對互聯網的跟進比較慢,如今也逐漸感到了不安,開始投入巨大的資源開發本身的瀏覽器,最終從1996年開始,Windows操做系統綁定安裝了IE瀏覽器。微軟在這段時間的舉動引起了俗稱的「瀏覽器大戰」。服務器
瀏覽器開發商之間的這場軍備競賽主要體如今各競爭產品都在很是快速地開發迭代,以及瘋狂加入各類新功能,也就徹底沒法顧及產品是否符合規範標準,甚至來不及用正兒八經的文檔記錄下各類新代碼新功能。對核心HTML特性的擅自調整包括各類蠢事(如閃爍的文字,這是Netscape的發明創造,但最終淪爲笑柄)乃至一些著名的特性,如可更換字樣(Typeface)或能夠在所謂的框架(Frame)裏嵌入外部文檔。在各瀏覽器廠商的產品裏,每每還內置對自家編程語言(如JavaScript和Visual Basic)支持,以及可在用戶機器上執行跨平臺Java或Flash小程序的插件,支持有用但頗詭異的各類HTTP擴展(如Cookie)。這一階段的瀏覽器儘管囿於某些專利和商標上的緣由,彼此間會有兼容性問題,但這些不兼容大都還比較表面。框架
隨着Web的日益發展壯大和百花齊放,一種隱祕的惡疾悄然在瀏覽器引擎之間傳播開來,儘管表面上還勉強維持着兼容性。這麼作最開始的理由聽上去還蠻合情合理的:若是瀏覽器A能夠正常顯示一個有問題的頁面,而瀏覽器B卻拒絕解析這個頁面(不管基於何種緣由),用戶確定會認爲這是瀏覽器B有問題,而一股腦地選擇貌似更強大的瀏覽器A。爲了確保瀏覽器能夠正確地顯示任何網頁,工程師的開發變得愈來愈複雜,也沒有什麼正式的文檔來描述瀏覽器對於網站管理員胡亂提供的網頁,是怎麼進行主動猜想解析的,而在這些處理過程當中每每會犧牲掉安全性,偶爾也會累及兼容性。遺憾的是,這樣的變更每每又會進一步縱容各類不靠譜的網頁設計觀念,迫使其餘瀏覽器開發商爲免掉隊,也只能亦步亦趨地跟進。固然,相關規範標準的細節缺失,更新也不及時,更是滋長了這種惡疾的蔓延。
到1994年,爲了解決開發上日益混亂的場面和管理HTML的升級擴展,Tim Berners-Lee和一羣資助的公司建立了W3C理事會(World Wide Web Consortium)。遺憾的是,在很長一段時間內這個組織也只能眼睜睜地看着HTML標準被胡亂擴展和修改。最開始的時候W3C 只是想制定一個符合當時實際情況的HTML 2.0 和HTML 3.2 標準,但最後這些規範都只是半成品,由於等到公開發布之日,它們其實早就過期了。W3C也嘗試過一些通過深思熟慮的創新項目,如層疊樣式表(Cascading Style Sheet,CSS),但要瀏覽器開發商們接納還須要一點時日。
另外像歐洲計算機制造者協會(European Computer Manufacturers Association,ECMA)、國際標準組織(International Organization for Standardization ,ISO)和互聯網工程任務組(Internet Engineering Task Force ,IETF)等一些組織都企圖對一些已實現的技術如HTTP 和 JavaScript作一些標準化和改進的工做。但惋惜,各方的努力不多會相互通氣協調,一些討論和設計決策也每每由大公司和股東們控制,這些人根本不關心技術的長期前景。這樣只會產生一些僵硬的標準,互相矛盾的建議,以及協議之間須要交互時各類有害的嚇人的案例,實際上這些規範本能夠設計得更好些—這個問題在第9章討論到各類內容隔離機制時尤其明顯。
圍繞Web的爭論仍然持續不斷,因爲操做系統綁定策略微軟瀏覽器得以一家獨大。十年以後,Netscape Navigator退出市場, Internet Explorer 得到80%的市場佔有率—這差很少也是5年前Netscape 瀏覽器的佔有率。在這場新功能的攀比大賽中,犧牲的主要就是安全性和可交互性,既然如今戰爭已結束,塵埃落定後開發者們想來應該能夠擱置彼此的異見,坐下來對過往的混亂局面撥亂反正一下吧。
然而,壟斷也滋生了自滿:在得逞以後,微軟就徹底缺少動力去改進本身的瀏覽器了。在IE5以前,微軟每一年發佈一個新版本,而後足足過兩年才推出IE6,其後更是用了漫長的5年才從IE6升級到IE7。既然微軟不感興趣,其餘的瀏覽器廠商勢單力孤,也很難帶來什麼翻天覆地的變化;而大部分網站也不肯爲了極少數的訪問者而修改不符合規範的網頁。
而另外一方面,緩慢的開發進展使W3C得以追上瀏覽器的實際情況,並認真探索將來Web的一些新概念。在2000年的時候出現的一些新變革包括HTML4(這是通過整理的HTML語言,廢棄或禁用了早期HTML版本里的一些累贅功能或策略性錯誤)和 XHTML 1.1(這是一種格式很嚴格的結構化XML文檔,不會產生模棱兩可的解析,也不會須要瀏覽器主動猜想這類文件的屬性問題)。W3C理事會更是對JavaScript 裏的DOM(Document Object Model,文檔對象模型)和CSS作了重大改良。但遺憾的是,到20世紀結束的時候,因爲Web已經步入成熟,致使早期造下的禍端已無法一筆抹去,但同時它又仍處於青春期,因此這些安全問題又貌似還沒到那麼急迫和突顯。儘管這時語法獲得了改善,無用的標籤被廢棄了,各類驗證器也寫好了,江湖座次也已排定了,但瀏覽器差很少仍是老樣子:臃腫、古怪和難以預測。
不久發生了一件有趣的事情:微軟推出了一個頗不起眼的專有API,名叫XMLHttpRequest,這個名字也頗讓人摸不着頭腦。這個新玩意兒原本並不重要,最開始這個API只是在微軟Web版的Outlook應用裏小試了一把牛刀。但最後XMLHttpRequest卻大放異彩,由於它實現了客戶端JavaScript 和服務器之間不受限制的異步HTTP通訊,而無需額外的時間開銷和頁面重載。以這種方式,這個API更是對其後出現Web 2.0熱潮推波助瀾,Web 2.0就包括許多響應式的基於瀏覽器的複雜應用,用戶能輕鬆使用複雜的數據集,方便地實現羣體合做和我的內容出版等,它已經一腳踏入屬於傳統客戶端的神聖領域裏了,變成「真正的」軟件了。能夠理解,它引發了極大轟動。
伴隨着互聯網和各類瀏覽器的日益流行,XMLHttpRequest也把Web推到了激動人心的新高度,同時,也給咱們帶來了許多會影響我的和商業界的重大安全隱患。到2002年,蠕蟲和瀏覽器漏洞變成了媒體上常常能看到的主題。因爲微軟的領導地位和對安全相對疏忽的態度,它承受了最多的公關壓力。微軟對這些問題一律視而不見,但這些壓力積累發酵事後,終於造就了一次小規模的反抗。
到2004年,瀏覽器舞臺上出現了一位新選手:Mozilla Firefox(原網景公司Navigator瀏覽器的後裔,由開源社區開發),它針對的正是IE糟糕的安全性和與標準的不兼容性。在得到IT專欄做家和安全專家的廣泛確定後,Firefox 很快得到了20%的市場份額。儘管這位後來者很快也被證實和微軟瀏覽器同樣,受到各類安全漏洞困擾,但因爲Firefox的開源特性,以及無需迎合頑固的企業用戶,使它的問題修復較爲迅速及時。
注意 爲何瀏覽器開發領域裏的競爭如此激烈呢?嚴格來講,瀏覽器的市場份額並無辦法直接轉化成金錢收入。但專家們認爲這關乎權勢地位:由於能夠經過瀏覽器來捆綁、推銷或邊緣化某個在線服務(即便像默認搜索引擎這麼簡單的服務),也就是說誰控制了瀏覽器,誰就控制了互聯網。
除了Firefox,微軟還有別的憂慮。隨着愈來愈多的應用(從文本剪輯器到遊戲)轉而以Web方式運行,它的旗艦產品微軟視窗操做系統正愈來愈淪爲瀏覽器的工做平臺。這顯然是個不利的信號。
這些事實連同忽然殺入市場的蘋果公司瀏覽器Safari和Opera瀏覽器在智能手機領域的步步領先,必定使微軟的高層深覺頭痛不已。他們已經錯失了20世紀90年代互聯網第一波高潮;固然他們不想再犯一樣的錯誤。微軟從新加大了對IE瀏覽器的投入,發佈了有極大提高和在某些方面來講更安全的版本,從IE七、8迅速迭代到了IE9。
IE的競爭對手們拿出了各類新功能與之對抗,甚至聲稱本身對標準的支持更好(雖然也只是表面上的)、瀏覽更安全、效率更爲提升。XMLHttpRequest出乎意料以外的成功引人矚目,你們迅速把過去的經驗教訓拋到了腦後,有時候也會單方面引入不成熟或不安全的設計,如 Firefox瀏覽器的globalStorage和IE的httponly Cookie,這徹底就是在碰運氣了。
好像還嫌事情不夠混亂,因爲對W3C理事會在創新性上的不滿,一羣參與者建立了一個全新的標準組織,叫網頁超文本技術工做小組(Web Hypertext Application Technology Working Group,WHATWG)來主導HTML5協議的開發,這是對現有標準的第一次總體性和把安全也考慮進去的修訂,但據報道,他們常常因爲專利紛爭而無法和微軟達成一致。
在Web的整個發展歷程中,因爲缺少統一的遠景目標和完整的安全規範,其開發模式很是獨特,整個發展過程競爭激烈、變幻莫測,與政治牽扯過多,結果錯漏百出。這些問題都對瀏覽器如今的工做方式以及怎樣安全地處理用戶數據有深遠的影響。
在瞭解的Web的簡要歷史以後,相信對於一些最基本的困惑(好比爲何會有那麼多的瀏覽器兼容性問題)會有一個簡單的認識,後面在進一步學習和處理問題的時候,不至於以爲無所適從。