-
SPDY
鎖定
SPDY功能
定位
- 將頁面加載時間減少50%。
- 最大限度地減少部署的複雜性。SPDY使用TCP作為傳輸層,因此無需改變現有的網絡設施。
- 避免網站開發者改動內容。 支持SPDY唯一需要變化的是客户端代理和Web服務器應用程序。
具體技術目標
- 單個TCP連接支持併發的HTTP請求。
- 壓縮報頭和去掉不必要的頭部來減少當前HTTP使用的帶寬。
- 定義一個容易實現,在服務器端高效率的協議。通過減少邊緣情況、定義易解析的消息格式來減少HTTP的複雜性。
- 強制使用SSL,讓SSL協議在現存的網絡設施下有更好的安全性和兼容性。
SPDY原理
在SSL層上增加一個SPDY會話層,以在一個TCP連接中實現併發流。
通常的HTTP GET和POST格式仍然是一樣的;然而SPDY為編碼和傳輸數據設計了一個新的幀格式。
流是雙向的,可以在客户端和服務器端啓動。
SPDY基本特徵
- 複用流:SPDY允許在一個連接上無限制併發流。因為請求在一個通道上,TCP效率更高:更少的網絡連接,發出更少更密集的數據包。
- 請求優先級:雖然無限的併發流解決了序列化的問題,但他們引入了另一個問題:如果帶寬通道受限制, 客户端可能會因防止堵塞通道而阻止請求。為了克服這個問題,SPDY實行請求優先級:客户端從服務器端請求它希望的項目數量,併為每個請求分配一個優先級。這可以防止在網絡通道被非關鍵資源堵塞時,高優先級的請求被掛起。
- HTTP報頭壓縮:SPDY壓縮請求和響應HTTP報頭,從而減少傳輸的數據包數量和字節數。
SPDY高級特徵
SPDY提供了高級特徵:服務器啓動流。服務器啓動流能用來分發內容到客户端,而不需要客户端發起請求。此選項可以由Web開發人員通過如下兩種方法配置:
- Server push:SPDY通過X-Associated-Content頭試驗了服務器推送數據給客户端的選項。這個頭告訴客户端服務器將在客户端請求資源之前,推送資源給它。對於初始頁面下載(例如用户初次訪問這個網站),這樣能大大提升用户體驗。
- Server hint:相對於自動推送資源到客户端,在服務器事先知道客户端需要的資源的情況下,服務器使用X-Subresources頭建議客户端請求特殊的資源。但是,服務器仍然在發送內容前等待客户請求。通過窄帶,這個選項能減少一個客户端發現它所需要的資源的數百毫秒,可能更適合於非初始頁面加載。
SPDY關係
SPDY並不用於取代HTTP/1.x,它只是修改了HTTP/1.x的請求與應答在網絡上傳輸的方式;這意味着只需增加一個SPDY傳輸層,現有的所有服務端應用均不用做任何修改。 當使用SPDY的方式傳輸,HTTP請求會被處理、標記簡化和壓縮。比如,每一個SPDY端點會持續跟蹤每一個在之前的請求中已經發送的HTTP報文頭部,從而避免重複發送還未改變的頭部。而還未發送的報文的數據部分將在被壓縮後被髮送。
SPDY瀏覽器支持
Google Chrome和Chromium已經支持SPDY。
Mozilla Firefox自11.0開始內嵌支持SPDY。從Firefox 13開始默認開啓對SPDY的支持。
Opera從12.10開始支持SPDY。
Internet Explorer 11開始支持SPDY。
注意:由於SPDY協議已被HTTP/2協議取代,上述瀏覽器的新版本可能不再支持SPDY協議。
SPDY取代
互聯網工程任務組(IETF)對谷歌提出的SPDY協議進行了標準化,於2015年5推出了類似於SPDY協議的 HTTP 2.0 協議標準(簡稱HTTP/2)。谷歌因此宣佈放棄對SPDY協議的支持,轉而支持HTTP/2。谷歌稱,計劃於 2016 年初在 Chrome 中移除 SPDY,並將為Chrome 40 添加 HTTP/2 協議支持。
此外,著名的開源HTTP服務器軟件 Nginx 也於2015年9月移除了對SPDY的支持,轉而支持HTTP/2。
鑑於此,未來會有越來越多的瀏覽器和Web服務器選擇支持HTTP/2而非SPDY,以前支持SPDY的瀏覽器和Web服務器也會通過升級取消對SPDY的支持轉為支持HTTP/2。