天天看點

思維導圖分析http之http協定版本

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>&lt;</code><code>html</code><code>&gt;</code>

<code>      </code><code>&lt;</code><code>body</code><code>&gt;Hello World&lt;/</code><code>body</code><code>&gt;</code>

<code>    </code><code>&lt;/</code><code>html</code><code>&gt;</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,如需轉載請自行聯系原作者