Ed Burns 谈 HTTP/2 和 Java EE Servlet 4 规范

阅读数:5661 2015 年 4 月 1 日

在 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


感谢邵思华对本文的审校。

给 InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流。

收藏

评论

微博

发表评论

注册/登录 InfoQ 发表评论