1.結構總覽
在http協定這一章,我将先後介紹上圖六個部分,本文先介紹http的協定版本。
2.http協定版本
<a href="https://s1.51cto.com/wyfs02/M00/97/C7/wKiom1kyumOy55t4AAAhzZljj44537.png" target="_blank"></a>
http協定的曆史并不長,從1991的0.9版本到現在(2017)僅僅才20多年,算算下來,http還是正處青年,正是大好發展的好時光。雖然短短不到27年,卻改變了人類認識世界的方式。在這裡,必須給偉大的先賢們鞠躬緻敬。
<a href="https://s3.51cto.com/wyfs02/M00/97/C7/wKiom1kyvALTOwIwAACB_MQAMRg571.png" target="_blank"></a>
0.9版本功能十分簡單,僅僅一個get功能,get翻譯過來就是獲得,在這裡指擷取資源。因為功能簡陋,自然得不到很大的應用,是以在五年之後釋出了新的版本1.0。
<a href="https://s2.51cto.com/wyfs02/M01/97/C9/wKioL1kyvXrTnyG9AABEuFqPHtw111.png" target="_blank"></a>
http1.0版本請求格式形如這樣:
<code> </code><code>GET / HTTP/1.0</code>
<code> </code><code>User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5)</code>
<code> </code><code>Accept: */*</code>
回應格式形如這樣:
<code> </code><code>HTTP/1.0 200 OK </code>
<code> </code><code>Content-Type: text/plain</code>
<code> </code><code>Content-Length: 137582</code>
<code> </code><code>Expires: Thu, 05 Dec 1997 16:00:00 GMT</code>
<code> </code><code>Last-Modified: Wed, 5 August 1996 15:55:28 GMT</code>
<code> </code><code>Server: Apache 0.84 </code>
<code> </code><code><</code><code>html</code><code>></code>
<code> </code><code><</code><code>body</code><code>>Hello World</</code><code>body</code><code>></code>
<code> </code><code></</code><code>html</code><code>></code>
盡管http1.0功能已經十分強大,但仍然還有缺點。每個TCP連接配接隻能發送一個請求,是以TCP連接配接的建立成本很高,效率低下,是以後來引入了keep-alive機制,即持久連接配接。簡單了解,即長時間連接配接不間斷。
http1.0功能十分強大,是以加大了人們對http協定的依賴,有了廣泛的應用與觀衆的掌聲,http協定的研發人員像是打了雞血一般,僅僅時隔半年版就釋出了http1.1。人們常說慢工出細活,對不起,在這不适用。在這裡更像是時間的濃縮的産品就是精華。http1.1功能更為強大,以至于到今天還在應用。
http1.1協定的優點如下:
<code> </code><code>1.增強了緩存功能,目前流行版本</code>
<code> </code><code>2.引入了持久連接配接(persistent connection)</code>
<code> </code><code>3.引入了管道機制(pipelining),用戶端可以同時發送多個請求。</code>
<code> </code><code>4.引入Content-Length字段,标記内容長度</code>
<code> </code><code>5.引入分塊傳輸編碼,極大增加了傳輸的速度</code>
<code> </code><code>6.更豐富的method:GET, POST, HEAD,PUT, DELETE,TRACE, OPTIONS,HOST</code>
http1.1的資料按次序通信,有隊頭堵塞問題。阻塞了自然要疏通,疏通的常見方式有兩種:
<code> </code><code>1.減少請求數</code>
<code> </code><code>2.同時多開持久連接配接</code>
減少請求數很好了解,不再啰嗦。多開持久連接配接,本質上也是減少請求數,規避不必要的去頻繁斷開。因這兩種方式,由此産生了很多解決技巧,技巧有如下:
<code> </code><code>1.合并腳本和樣式表,</code>
<code> </code><code>2.将圖檔嵌入CSS代碼</code>
<code> </code><code>3.域名分片(domain sharding)</code>
基于效率以及安全的考慮,http2強勢登場。http2的前身是google公司的SPDY協定,SPDY協定非常強大,http研發工程師,自感亞曆山大,是以又火急火燎地研發除了http2協定。http2有如下特點:
<code> </code><code>1.前身:SPDY 協定(google)</code>
<code> </code><code>2.徹底的二進制協定,頭資訊和資料體都是二進制,效率提升,加大安全</code>
<code> </code><code>3.多路複用(MultiPlexing),即連接配接共享,規避隊頭堵塞</code>
<code> </code><code>4.資料流傳輸,增加傳輸效率</code>
<code> </code><code>5.頭資訊壓縮,減小了傳輸的大小</code>
<code> </code><code>6.伺服器推送</code>
至此,http協定版本介紹完畢,感謝觀賞,下一節介紹一次完整的http請求過程。
本文轉自 PowerMichael 51CTO部落格,原文連結:http://blog.51cto.com/huwho/1931998,如需轉載請自行聯系原作者