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

jopen 9年前發布 | 15K 次閱讀 Java Servlet

原文  http://www.infoq.com/cn/news/2015/04/burns-servlet-http2

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

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

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

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

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年第三季度最終發布。

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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!