左邊是普通 HTTPS 加載,右邊是 SPDY 加載,。是不是很神奇?
SPDY 是什么 ,?
SPDY 是 Google 開(kāi)發(fā)的基于傳輸控制協(xié)議 (TCP) 的應(yīng)用層協(xié)議 ,,開(kāi)發(fā)組正在推動(dòng) SPDY 成為正式標(biāo)準(zhǔn)(現(xiàn)為互聯(lián)網(wǎng)草案)。SPDY 協(xié)議旨在通過(guò)壓縮,、多路復(fù)用和優(yōu)先級(jí)來(lái)縮短網(wǎng)頁(yè)的加載時(shí)間和提高安全性。(SPDY 是 Speedy 的昵音,,意思是更快)
SPDY 與 HTTP 的關(guān)系
SPDY 協(xié)議只是在性能上對(duì) HTTP 做了很大的優(yōu)化,,其核心思想是盡量減少連接個(gè)數(shù),,而對(duì)于 HTTP 的語(yǔ)義并沒(méi)有做太大的修改。具體來(lái)說(shuō)是,,SPDY 使用了 HTTP 的方法和頁(yè)眉,,但是刪除了一些頭并重寫(xiě)了 HTTP 中管理連接和數(shù)據(jù)轉(zhuǎn)移格式的部分,所以基本上是兼容 HTTP 的,。
Google 在 SPDY 白皮書(shū)里 表示要向協(xié)議棧下面滲透并替換掉傳輸層協(xié)議(TCP),但是因?yàn)檫@樣無(wú)論是部署起來(lái)還是實(shí)現(xiàn)起來(lái)暫時(shí)相當(dāng)困難,,因此 Google 準(zhǔn)備先對(duì)應(yīng)用層協(xié)議 HTTP 進(jìn)行改進(jìn),,先在 SSL 之上增加一個(gè)會(huì)話層來(lái)實(shí)現(xiàn) SPDY 協(xié)議,,而 HTTP 的 GET 和 POST 消息格式保持不變,即現(xiàn)有的所有服務(wù)端應(yīng)用均不用做任何修改,。
因此在目前,,SPDY 的目的是為了加強(qiáng) HTTP,是對(duì) HTTP 一個(gè)更好的實(shí)現(xiàn)和支持,。至于未來(lái) SPDY 得到廣泛應(yīng)用后會(huì)不會(huì)演一出貍貓換太子,替換掉 HTTP 并徹底顛覆整個(gè) Internet 就是 Google 的事情了。
為什么要重新建立一個(gè) SPDY ,?
距離萬(wàn)維網(wǎng)之父蒂姆·伯納斯-李發(fā)明并推動(dòng) HTTP 成為如今互聯(lián)網(wǎng)最流行的協(xié)議已經(jīng)過(guò)去十幾年了(現(xiàn)用 HTTP 1.1 規(guī)范也停滯了 13 年了),,隨著現(xiàn)在 WEB 技術(shù)的飛速發(fā)展尤其是 HTML5 的不斷演進(jìn),包括 WebSockets 協(xié)議的出現(xiàn)以及當(dāng)前網(wǎng)絡(luò)環(huán)境的改變,、傳輸內(nèi)容的變化,,當(dāng)初的 HTTP 規(guī)范已經(jīng)逐漸無(wú)法滿足人們的需要了,HTTP 需要進(jìn)一步發(fā)展,,因此 HTTPbis 工作組已經(jīng)被組建并被授權(quán)考慮 HTTP 2.0 ,希望能解決掉目前 HTTP 所帶來(lái)的諸多限制,。而 SPDY 正是 Google 在 HTTP 即將從 1.1 跨越到 2.0 之際推出的試圖成為下一代互聯(lián)網(wǎng)通信的協(xié)議,,長(zhǎng)期以來(lái)一直被認(rèn)為是 HTTP 2.0 唯一可行選擇。
HTTP 協(xié)議的不足
1. 單路連接 請(qǐng)求低效
HTTP 協(xié)議的最大弊端就是每個(gè) TCP 連接只能對(duì)應(yīng)一個(gè) HTTP 請(qǐng)求,,即每個(gè) HTTP 連接只請(qǐng)求一個(gè)資源,瀏覽器只能通過(guò)建立多個(gè)連接來(lái)解決,。此外在 HTTP 中對(duì)請(qǐng)求是嚴(yán)格的先入先出(FIFO)進(jìn)行的,,如果中間某個(gè)請(qǐng)求處理時(shí)間較長(zhǎng)會(huì)阻塞后面的請(qǐng)求,。
(注:雖然 HTTP pipelining 對(duì)連接請(qǐng)求做了改善,但復(fù)雜度增加很大,,并未普及)
2. HTTP 只允許由客戶端主動(dòng)發(fā)起請(qǐng)求
服務(wù)端只能等待客戶端發(fā)送一個(gè)請(qǐng)求,,在可以滿足預(yù)加載的現(xiàn)狀是一種桎梏。
3. HTTP 頭冗余
HTTP 頭在同一個(gè)會(huì)話里是反復(fù)發(fā)送的,,中間的冗余信息,比如 User-Agent,、Host 等不需要重復(fù)發(fā)送的信息也在反復(fù)發(fā)送,,浪費(fèi)帶寬和資源。
SPDY 協(xié)議的優(yōu)點(diǎn)
1. 多路復(fù)用 請(qǐng)求優(yōu)化
SPDY 規(guī)定在一個(gè) SPDY 連接內(nèi)可以有無(wú)限個(gè)并行請(qǐng)求,,即允許多個(gè)并發(fā) HTTP 請(qǐng)求共用一個(gè) TCP會(huì)話。這樣 SPDY 通過(guò)復(fù)用在單個(gè) TCP 連接上的多次請(qǐng)求,,而非為每個(gè)請(qǐng)求單獨(dú)開(kāi)放連接,,這樣只需建立一個(gè) TCP 連接就可以傳送網(wǎng)頁(yè)上所有資源,不僅可以減少消息交互往返的時(shí)間還可以避免創(chuàng)建新連接造成的延遲,,使得 TCP 的效率更高。
此外,,SPDY 的多路復(fù)用可以設(shè)置優(yōu)先級(jí),,而不像傳統(tǒng) HTTP 那樣嚴(yán)格按照先入先出一個(gè)一個(gè)處理請(qǐng)求,它會(huì)選擇性的先傳輸 CSS 這樣更重要的資源,,然后再傳輸網(wǎng)站圖標(biāo)之類(lèi)不太重要的資源,可以避免讓非關(guān)鍵資源占用網(wǎng)絡(luò)通道的問(wèn)題,,提升 TCP 的性能,。
2. 支持服務(wù)器推送技術(shù)
服務(wù)器可以主動(dòng)向客戶端發(fā)起通信向客戶端推送數(shù)據(jù),這種預(yù)加載可以使用戶一直保持一個(gè)快速的網(wǎng)絡(luò),。
3. SPDY 壓縮了 HTTP 頭
舍棄掉了不必要的頭信息,經(jīng)過(guò)壓縮之后可以節(jié)省多余數(shù)據(jù)傳輸所帶來(lái)的等待時(shí)間和帶寬,。
4. 強(qiáng)制使用 SSL 傳輸協(xié)議
Google 認(rèn)為 Web 未來(lái)的發(fā)展方向必定是安全的網(wǎng)絡(luò)連接,,全部請(qǐng)求 SSL 加密后,信息傳輸更加安全,。
SPDY 協(xié)議的意義
按照 Google 的說(shuō)法,SPDY 被創(chuàng)造出來(lái)的唯一目的就是讓 Web 更快(strive to make the whole web fast),,其名字 SPDY(Speedy) 也似乎在暗示著這一點(diǎn),。那么 SPDY 的意義又在哪里呢?
1. 普通用戶:
對(duì)于使用者來(lái)說(shuō),,隱藏在瀏覽器下面的 SPDY 相比 HTTP 沒(méi)有任何區(qū)別,但是我們可以感覺(jué)到 Google 服務(wù)在 Chrome 下異常的快,,這就是 SPDY 的功勞了,。此外網(wǎng)站信息傳輸加密后不用擔(dān)心信息被截取等,大大增加了安全性和保密性,。
2. 前端人員:
對(duì)于前端工程師們來(lái)說(shuō),提升頁(yè)面效率是一件很重要的事情,,目前大多采用像 CSS Sprites 等方法來(lái)優(yōu)化網(wǎng)站,,對(duì)于因?yàn)轫?yè)面加載時(shí)每張圖片、icon 都請(qǐng)求一個(gè)連接甚至采用在不同頁(yè)面引用不同圖片來(lái)降低一個(gè)頁(yè)面內(nèi)圖片的請(qǐng)求數(shù)量,。而現(xiàn)在有了 SPDY 的請(qǐng)求優(yōu)化可以將請(qǐng)求順序進(jìn)行重排,,這樣可以在很大程度上緩解頁(yè)面加載時(shí)圖片請(qǐng)求帶來(lái)的影響。例如像極客公園的報(bào)名頁(yè)面,,如果報(bào)名用戶過(guò)多,,例如極客公園2012年創(chuàng)新大會(huì)或極客公園第 27 期長(zhǎng)城會(huì),, 可以很明顯的感覺(jué)出頭像的請(qǐng)求會(huì)拖累整體頁(yè)面加載變慢甚至變卡,相信對(duì)于這點(diǎn),,經(jīng)常上淘寶或刷微博的會(huì)深有體會(huì),,一旦網(wǎng)速稍微慢點(diǎn)就會(huì)出現(xiàn)頁(yè)面加載異常,, 還有像蘋(píng)果 App Store(除去服務(wù)器因?yàn)榈貐^(qū)的延遲),,豌豆莢這類(lèi)應(yīng)用分發(fā)平臺(tái)上應(yīng)用圖標(biāo)刷新緩慢等,,如下面這個(gè)視頻所示。http://v.youku.com /v_show/id_XMzk3Njk1MDM2.html
3. 運(yùn)維人員:
SPDY 在降低連接數(shù)目的同時(shí),,還使得服務(wù)器上每個(gè)客戶端占用的資源也減少,從而可以釋放出更多內(nèi)存和 CPU ,。此外 SPDY 綜合起來(lái)可以將瀏覽速度提升一倍,,頁(yè)面加載延遲方面的改進(jìn)達(dá) 64% 。
眾家支持的 SPDY 協(xié)議
如果你在使用 Chrome 瀏覽器,,同時(shí)使用像 Gmail 等 Google 的網(wǎng)絡(luò)服務(wù)的話,其實(shí)你已經(jīng)不再是通過(guò) HTTP 訪問(wèn)這些服務(wù)了,。在瀏覽器打開(kāi) chrome://net-internals/#spdy 就會(huì)發(fā)現(xiàn)你已經(jīng)在使用 SPDY 協(xié)議了,。(除了包括 Google 自家的 Gmail、Google Plus 等 Google 系服務(wù)外,,其他公共站點(diǎn)例如 Twitter 和 Webtide 也已經(jīng)支持該協(xié)議。在國(guó)內(nèi),,基于 WebKit 的豌豆莢 2.0 也曾表示將引進(jìn)Chrome的SPDY技術(shù)來(lái)進(jìn)一步提升速度,。
就像上圖所示的那樣,,SPDY 的實(shí)現(xiàn)需要瀏覽器客戶端和 Web 服務(wù)器同時(shí)支持。在客戶端瀏覽器這快 Google自家的 Chrome 和Chromium 全系列不用說(shuō),,都已經(jīng)支持SPDY,; Mozilla 家的 Firefox 自 Firefox 13 也默認(rèn)開(kāi)啟對(duì) SPDY 的支持,。而亞馬遜家的 Silk 利用 SPDY 的深度其實(shí)不比 Google 自家的 Chrome 和 Firefox 差,。
在Web 服務(wù)器方面包括最流行和最廣泛的 Apache 在內(nèi),Netty,、Jeety,、Varnish、Erlang 和 Hightide 應(yīng)用服務(wù)器以及面向 node.js 的服務(wù)器也都已經(jīng)宣布支持 SPDY,。( Nginx 也表示將支持 SPDY)
如何部署 SPDY,?
近日 Google 正式發(fā)布了適用于最流行 Web 服務(wù)器 Apache 的插件 mod_spdy,,將其下載安裝后你的 Apache 服務(wù)器就能使用 SPDY 協(xié)議與兼容 SPDY 協(xié)議的瀏覽器如 Chrome、FireFox 等進(jìn)行通信,。像之前所說(shuō)的那樣,,SPDY 是運(yùn)行在 HTTPS 上,非 HTTPS 流量并不會(huì)受到 mod_spdy 影響,。
SPDY 部署要求:
1. Apache 2.2 (≥2.2.4)
2. mod_ssl 模塊開(kāi)啟
SPDY 部署步驟:
1
2
3
4
5
6
7
8
9
10
|
dpkg -i mod-spdy-*.deb
apt-get -f install
-系統(tǒng)為 Debian/Ubuntu
------------------------------------------------------------
yum install at (if you do not already have 'at' installed)
rpm -U mod-spdy-*.rpm
-系統(tǒng)為 CentOS/Fedora
|
3. 重啟服務(wù)器(Apache)
4. 確定開(kāi)啟與否
打開(kāi) Chrome 瀏覽器,,輸入并前往 chrome://net-internals/#spdy 頁(yè)面,查看主機(jī)名稱是否出現(xiàn)在標(biāo)識(shí)欄中,。如果出現(xiàn)說(shuō)明已經(jīng)部署完畢,如果沒(méi)有出現(xiàn)去服務(wù)器錯(cuò)誤日志(error.log)里查詢,。
未來(lái)的web基礎(chǔ),?
在最新的協(xié)議文檔里 Google 重新將 SPDY 分為了兩層,其中一層被描述為 HTTP-like,,大有取代 HTTP 的意圖(Google 最近的一篇文章已經(jīng)直呼 SPDY 為“a replacement for HTTP”)。同時(shí) HTTP 2.0 標(biāo)準(zhǔn)制定工作組(HTTPbis)也表示,,SPDY 很有希望接替當(dāng)前的 HTTP 傳輸實(shí)現(xiàn),。
考慮到 Chrome 和安卓的份額以及標(biāo)準(zhǔn)的推動(dòng),相信 SPDY 會(huì)有一個(gè)好前景,。因此選擇此刻支持 SPDY 也是明智的選擇,。