spdy vs http + ocean

HTTP 協議的不足

  1. 單路連接 請求低效

  HTTP 協議的最大弊端就是每個 TCP 連接只能對應一個 HTTP 請求,即每個 HTTP 連接只請求一個資源,瀏覽器只能通過建立多個連接來解決。此外在 HTTP 中對請求是嚴格的先入先出(FIFO)進行的,如果中間某個請求處理時間較長會阻塞後面的請求。

  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 正式發佈了適用於最流行 Web 服務器 Apache 的插件 mod_spdy,將其下載安裝後你的 Apache 服務器就能使用 SPDY 協議與兼容 SPDY 協議的瀏覽器如 Chrome、FireFox 等進行通信。像之前所說的那樣,SPDY 是運行在 HTTPS 上,非 HTTPS 流量並不會受到 mod_spdy 影響。如果要spdy最大範圍的生效,也即我們要全站支持https,而且需要在server端加上對應模塊。

http2

而Google也宣佈將在2016年棄用SPDY,轉而支持HTTP/2,HTTP/2是以SPDY爲原型,經過十多個版本草案的討論修改,到現在接近定稿,已經和SPDY有很大差異了。並且HTTP/2不會向後兼容SPDY。最新草案版本是第16版http://http2.github.io/http2-spec/

性能比較而言,這裏有一篇文章:http://www.infoq.com/cn/news/2015/02/https-spdy-http2-comparison顯示spdy和http2草案第14版均相比https有較大進步,但也說明spdy和http2不是一回事。

HTTP/2由標準化組織來制定,是基於SPDY的,主要差別是:

  1. 增加了HTTP/1.1 Upgrade的機制,可在TCP上直接使用HTTP/2,不像SPDY那樣必須在TLS上。
  2. HTTPS連接時使用NPN的規範版ALPN(Applcation Layer Protocol Negociation)。
  3. 更完善的協議商討和確認流程。
  4. 更完善的Server Push流程。
  5. 增加控制幀的種類,並對幀格式考慮得更細緻。
  6. 有新算法HPACK專門壓縮SPDY header block。

HTTP/2文檔帶有一些示例和詳細說明,這是SPDY沒有的。

說明如果現在支持spdy,將來至少要做代碼的改造才能夠支持http2,比如客戶端的庫,服務端的部署與庫,並且由於http2不向後兼容spdy,因此暫不做調整也是ok的,畢竟只有一年時間。而且在服務端發佈http2後,之前發佈出去支持spdy的版本若未升級完成,收益也將終止。對於網站和公司層面的步調,支持spdy也肯定是小衆的小範圍工作,全站未切https之前,無法支持spdy;而且google chrome也將在2016年不再支持,考慮到全站切https之後的時間差,公司層面不會全面地支持spdy。如果做完了也就做完了,沒有做完的話現在再做價值一般。

Ocean

Ocean是OAuth2的一個實現,主要解決的是認證授權的問題;app請求是作爲消費者先發送到Ocean的,server的服務提供者在它後面,所有的http請求頭需要Ocean進行配置。具體它有什麼服務器架構?apache?nginx?前端必須有這類web服務器,後面的調用可以理解爲是類似dubbo的配置方式暴露,web應用並不直接能改寫http請求相關參數,只負責響應內容。

Ocean的namespace是指什麼?是一個邏輯區分?可將某些namespace單獨做部署。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章