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