写点什么

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

2015 年 4 月 01 日

在 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 )关注我们,并与我们的编辑和其他读者朋友交流。

2015 年 4 月 01 日 08:275970

评论

发布
暂无评论
发现更多内容

花了10000小时从外包到大厂,鬼知道我经历了什么!但回头看来这一路辛酸还是值得的!

程序员小毕

Java 面试 分布式 微服务 算法

一个系统小BUG修复投产居然花了3个小时来处理(上)

罗小龙

28天写作 投产事故 解决思路

共识算法的简单理解(一)

石君

28天写作

朋友不讲武德急催我给他Java干货教程,我劝他耗子尾汁并丢给他一份GitHub上标星115k+的Java教程,他看了之后连忙向我道歉!

Java成神之路

Java 程序员 架构 面试 编程语言

阿里大佬整理的526页Netty笔记,面试大厂不再被网络通信难倒

Java成神之路

Java 程序员 架构 面试 编程语言

对微服务架构设计实践中若干问题的探讨

xcbeyond

微服务 微服务架构 微服务网关 28天写作

HTML(六)——html表单

程序员的时光

程序员 前端 日更挑战 28天写作

厉害!腾讯T3-2都还在学的微服务+MySQL+Kafka+boot2.x+虚拟机PDF

Java架构之路

Java 程序员 架构 面试 编程语言

史上最全!阿里巴巴2021年最新最全500道Java后端面试大全(值得收藏)

云流

Java 编程 程序员 面试

2050年的一次出游 (28天写作 Day15/28)

mtfelix

自动驾驶 28天写作 科幻写作

5G最核心的本质是能力可被编排及开放

JiangX

5G 数字化转型 28天写作

迄今为止把Mybatis讲解的最详细的PDF,图文并茂,通俗易懂

Java成神之路

Java 程序员 架构 面试 编程语言

有人相爱,有人年少财务自由,有人数据结构都背不出来

Java架构师迁哥

人设崩塌的美国生物实验室

脑极体

限时!字节Java程序性能优化宝典开源,原来这才叫性能优化

互联网架构师小马

Java 性能优化

OMG,阿里大佬Kafka手写实战记录,这也太香了

Java架构之路

Java 程序员 架构 面试 编程语言

Java虚拟机知识 - JVM入门

小马哥

Java JVM 架构师 Java虚拟机 日更挑战

从零开始学java第一天(为报训练营做准备)

落曦

疫情闭关修炼半个月,我竟把JDK源码都读懂了!

996小迁

Java 编程 架构 面试 程序人生

DCache 分布式存储系统|安装部署与应用创建

TARS基金会

缓存 分布式 微服务 存储 TARS

深度 | 阿里云蒋江伟:什么是真正的云原生?

阿里巴巴云原生

云计算 容器 运维 云原生 k8s

week9-conclusion

J

2020 总结 | VoltDB的亮点,你了解多少?

VoltDB

数据库 物联网 VoltDB

week9-homework

J

架构师 3 期 3 班 -week9- 总结

zbest

总结 week9

区块链数字货币钱包系统软件开发|区块链数字货币钱包APP开发

开發I852946OIIO

系统开发

惊悚,单个java进程占用700%的CPU

万里无云

Java 后端 cpu

知乎获赞5K+的面试总结,蚂蚁高级工程师的技术笔记,共12W字

Java成神之路

Java 程序员 架构 面试 编程语言

你跟涨薪只差这份Java核心知识点文档,读懂它你就是技术大佬!

Java架构之路

Java 程序员 架构 面试 编程语言

如何开发一个完善的Kafka生产者客户端?

码农架构

kafka 中间件 消息中间件 架构·

【高并发】ReadWriteLock怎么和缓存扯上关系了?!

冰河

并发编程 读写锁 高并发 性能调优 ReadWriteLock

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