http協議是前端常常打交道的協議之一,發展至今已經到了2.0版本,這兩天我刷完了《圖解HTTP》,讓我對與HTTP協議的發展史有了更深層的瞭解html
時間要回到1989年的聖誕節,那一天李爵士發明了世界上第一個網頁瀏覽器WorldWideWeb(同時也是網頁編輯器)和第一個網頁服務器。爲了在網頁瀏覽器和網頁服務器中傳輸文本信息,李爵士將超文本嫁接到因特網上(超文本的概念並非李爵士提出來的),由此誕生了超文本標記語言(HTML)前端
爲了在萬維網中發佈和接收HTML,李爵士發明了超文本傳輸協議協議,也就是HTTP的誕生web
1991年,李爵士發佈文章標誌着萬維網公共項目的開始。在創建HTTP標準規範時,制定者主要想把HTTP看成傳輸HTML文檔的協議,因此起初的協議很是簡單。瀏覽器
請求由單行指令構成,以惟一可用方法GET開頭,其後跟目標資源的路徑(一旦鏈接到服務器,協議、服務器、端口號這些都不是必須的)。緩存
GET /mypage.html安全
響應也極其簡單的:只包含響應文檔自己。bash
<HTML>這是一個很是簡單的HTML頁面</HTML>服務器
跟後來的版本不一樣,HTTP/0.9的響應內容並不包含HTTP頭,這意味着只有HTML文件能夠傳送,沒法傳輸其餘類型的文件;也沒有狀態碼或錯誤代碼:一旦出現問題,一個特殊的包含問題描述信息的HTML文件將被髮回,供人們查看。網絡
這時的HTTP協議,服務器發送完畢後就會關閉TCP鏈接編輯器
因爲 HTTP/0.9 協議的應用十分有限,瀏覽器和服務器的迅速發展和擴展,使其已經不可以知足須要,因此,1996年5月,HTTP協議的1.0版本發佈,此次發佈的內容並無被歸入標準,而是爲1.1版本的構建可擴展性的嘗試,更新的內容也很是多,主要有
此時,HTTP的請求已經變成這樣了
GET / HTTP/1.0
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)
Accept: */*
複製代碼
響應變成了這樣
HTTP/1.0 200 OK
Content-Type: text/plain
Content-Length: 137582
Expires: Thu, 05 Dec 1997 16:00:00 GMT
Last-Modified: Wed, 5 August 1996 15:55:28 GMT
Server: Apache 0.84
<html>
<body>Hello World</body>
</html>
複製代碼
此時的HTTP協議已經初具雛形,和咱們如今看到的很是像,這是第一個在通信中指定版本號的HTTP協議版本,至今仍被普遍採用,可是它並非沒有問題的,它仍然存在着0.9版本的問題,就是TCP鏈接不能夠複用,每次發送請求都須要創建TCP鏈接,新建成本高,還須要發送前的預熱。因此HTTP/1.0性能較差,爲了解決這個問題,有些瀏覽器在發送請求時,使用了一個非標準的Connection
字段。
Connection: keep-alive
複製代碼
服務器不關閉TCP鏈接,以便其餘請求複用,一樣回覆
Connection: keep-alive
複製代碼
一個能夠複用的TCP鏈接就創建了,直到客戶端或服務器主動關閉鏈接。可是,這不是標準字段,不一樣實現的行爲可能不一致,所以不是根本的解決辦法。
就在HTTP/1.0發佈的幾個月後,HTTP/1.1就誕生了,此次版本它進一步完善了HTTP協議,哪怕到今天都是最流行的協議之一
HTTP/1.1 消除了大量歧義內容並引入了多項改進:
Host
頭,可以使不一樣域名配置在同一個IP地址的服務器上。已經發展到這個時候,那麼協議完美了嗎
事實上並無,雖然能夠複用TCP鏈接,而且能夠在一個鏈接中同時發送多個HTTP請求,可是服務端的處理是按順序的,這就形成一個請求阻塞了,那麼後面的全部請求的響應都會阻塞,這稱爲"隊頭堵塞"(Head-of-line blocking)
解決方法一是減小請求數,二是同時多開持久鏈接。但通常瀏覽器最多同時創建六個TCP鏈接
隨着時代的發展,web的用途開始變得多種多樣,好比在線購物網站、社交網絡服務、企業或組織內部的各類管理工具,等等
雖然這些功能已經經過web應用和腳本程序實現,但在性能上未必最優,這是由於HTTP協議上的限制以及自身性能有限。
如下這些HTTP標準就會成爲瓶頸
HTTP的功能不足能夠經過建立一套全新的協議來彌補,但是目前基於HTTP協議的web瀏覽器已經遍及全球,所以沒法徹底拋棄HTTP,有一些新協議的規則是基於HTTP的,並在此基礎上添加了新的功能
Google在2010年發佈了SPDY,其開發目標旨在解決HTTP的性能瓶頸,縮短Web頁面的加載時間(50%)
SPDY沒有徹底改寫HTTP協議,而是在應用層和傳輸層之間經過新加會話層的形式運做。同時,考慮到安全性問題,SPDY規定通訊中使用SSL。
SPDY仍是採用HTTP創建通訊鏈接。所以仍是可使用HTTP的GET或POST等方法、Cookie以及HTTP報文等。
HTTP得到了如下額外的功能
SPDY解決了部分問題,可是並無從根本解決問題。
但這個協議在Chrome瀏覽器上證實可行之後,就被看成 HTTP/2 的基礎,主要特性都在 HTTP/2 之中獲得繼承。
HTTP/2.0的目標是改善用戶在使用Web時的速度體驗
對比HTTP/1.1,改善有以下幾點