Ed Burns談HTTP/2和Java EE Servlet 4規範

在2015年JavaLand大會上,Ed Burns展現了Java EE Servlet 4.0規範(JSR 369)的概要,演講的重點在於Java EE平臺對HTTP/2的支持。HTTP/2旨在解決現存HTTP規範中的問題,並引入新的功能,包括request/response多路複用、二進制幀傳輸(binary framing)、數據流優先級、服務器推送和頭信息壓縮。html

Burns是Oracle公司的技術顧問之一,他從因爲HTTP/1.1中固有的缺陷,致使當前典型網站的30多種資源傳輸到瀏覽器端很慢這一現象談起。首要的問題是‘對頭阻塞(head-of-line,HOL)’引發的,緣由是被請求的資源必須排隊依次傳輸。爲此,現代瀏覽器會嘗試使用打開多個socket鏈接、域名碎片和文件串聯等技術,做爲臨時解決方案。java

Burns表示,HTTP/2本質上是基於HTTP/1.1的新的傳輸層,是OSI模型應用層的實現。該協議定義了一樣的request/response模型,並無引入新的方法或者頭信息、應用層上的新的使用模式,也沒有新的URL用法以及底層規範。git

HTTP/1.1幾乎沒有涉及如何使用TCP套接字,TCP包能夠視爲丟棄的資源。相反,新的HTTP/2規範建議把Socket視爲稀缺資源,每臺服務器只開放一條TCP鏈接。 HTTP/2的‘流’本質上是一條TCP鏈接的通道(channel),消息在通道中進行傳送。幀(frame)是HTTP/2通訊的最小單位。github

HTTP/2規範還包括:瀏覽器

  • request/response多路複用——每一個TCP鏈接都是全雙工的。
  • 二進制幀傳輸——HTTP/2是一種二進制協議,更容易傳輸幀。幀的開始和結束徹底由基於文本的協議(好比HTTP/1.1)決定。二進制幀傳輸還將解決HOL阻塞問題。
  • 數據流優先級——每一個流都有優先級,用於決定哪些流是最重要的。
  • 服務器端推送——這使得服務器端能夠在瀏覽器請求資源以前,預先填充瀏覽器端的緩存。
  • 頭信息壓縮 (以HPACK聞名)——展現頭信息域的一種高性能壓縮格式。
  • HTTP/2對HTTP/1.1的升級——包括非安全(使用80端口而且HTTP狀態碼爲101的‘切換協議’) 和安全(使用NPN或者 ALPN)傳輸層升級協議的定義。

Burns討論了已有的對HTTP/2的批評,包括HOL阻塞可能發生在頭信息幀中,Firefox和Chrome不支持非安全傳輸層協議升級、因爲HPACK編碼/解碼過程致使碳足跡(carbon footprint)的增長、因爲必須寫入HTTP/2規範實現中的新軟件的表面面積巨大,致使潛在增長DoS攻擊源,以及HTTP/2實際上與WebSocket是正交等方面內容。緩存

演講最後討論了Java EE Servlet API可能包含的對HTTP/2規範的支持。可能支持的功能包括:request/response多路複用、數據流優先級、服務器端推送,以及對HTTP1.1的升級。安全

數據流優先級會經過新的Priority類實現,而且現有的HttpServletRequest和HttpServletResponse類會增長訪問和修改數據流優先級的方法。Burns還指出,服務器端推送對如JSF這樣的框架會很是有用,它還可以實現經過給定的URL和頭信息,將資源推送到客戶端的能力。服務器

Servlet 4.0規範會把HTTP/2引入 Java EE,並100%兼容實現HTTP/2規範。這將由2014年9月制定的JSR 369來支持,JSR369暫定於2015年第四季度肯定最終草案,預計2016年第三季度最終發佈。oracle

Burns鼓勵全部感興趣的人經過Adopt-a-JSR計劃參與Servlet4.0的建立、經過訪問Java EE參考實現應用服務器GlassFish的網頁,體驗Aquarium blog。JSR369規範的更多相關信息詳見Java Community Process(JCP)網站。JavaLand是在德國布呂爾召開的年度Java大會,詳情參見JavaLand事件網站框架

查看英文原文:Ed Burns Discusses HTTP/2 and the Java EE Servlet 4 Specification

相關文章
相關標籤/搜索