在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

Ed Burns谈HTTP/2和Java EE Servlet 4规范的更多相关文章

  1. Java EE Servlet相关的两个包

    Servlet in Java EE 在Java EE的规范API中(链接),Servlet相关联的最重要的两个Package为: 1.javax.servlet 包含了一系列接口和类,他们在一个Se ...

  2. java ee Servlet 开发框架分享

    大家好! 这里分享一下javaEE Servlet开发框架! 1.首先是POST和GET入口以及接收处理文件 package com.sl.imps; import java.io.IOExcepti ...

  3. Java EE Servlet 几个path

    ContextPath Context ['kɒntekst] 不识庐山真面目,只缘身在此山中. 相对路径 RealPath 绝对路径 ServletPath 就是servlet-mapping 中 ...

  4. Java EE - Servlet 3.0 和 Spring MVC

    Table of Contents 前言 基于 Java 的配置 ServletContainerInitializer 动态配置 DispatcherServlet 和 ContextLoaderL ...

  5. Java EE - Servlet 小结

    Table of Contents 前言 Servlet 的生命周期 Servlet 的初始化 ServletContext & ServletConfig 请求的处理 HttpServlet ...

  6. Java EE.Servlet.会话管理

    一次会话是从客户打开浏览器开始到关闭浏览器结束.记录会话信息的技术称为会话跟踪.常见的会话跟踪技术有Cookie.URL重写和隐藏表单域. 1.Cookie Cookie是一小块可以嵌入到HTTP请求 ...

  7. Java EE.Servlet.生成响应

    Servlet的核心职责就是根据客户端的请求生成动态响应. 1.编码类型 2.流操作(下载文件) servlet支持两种格式的输入/输出流.一种是字符输入输出流.另一种是字节输入输出流. 3.重定向

  8. Java EE.Servlet.处理请求

    Servlet的核心工作便是处理客户端提交的请求信息,生成动态响应信息返回客户端. 1.请求参数 POST方法一般用于更新服务器上的资源,当时用POST方法时,提交的数据包含在HTTP实体内,而GET ...

  9. 影响Java EE性能的十大问题(转)

    本文作者是一名有10多年经验的高级系统架构师,他的主要专业领域是Java EE.中间件和JVM技术.他在性能优化和提升方面也有很深刻的见解,下面他将和大家分享一下常见的10个影响Java EE性能问题 ...

随机推荐

  1. 通过源码看android系列之multidex库

    我们在开发项目时,喜欢引入好多的第三方包,大大的方便了我们的开发,但同时,因为android方法总数的限制,不能超过65k,然而呢,随着我们的开发,65k最终还是会超过,所以,google就给出了这个 ...

  2. VC printf输出彩色字体

    在VC下使用SetConsoleTextAttribute()函数可以改变当前控制台的前景色和背景色,从而达到输出彩色字体的效果. 使用的方法也很简单,具体代码如下: #include <win ...

  3. 【Android】数据库的简单应用——创建数据库

    SQLiteOpenHelper是一个抽象类,要使用它必须写一个类继承它.SQLiteOpenHelper有两个抽象方法onCreate()和onUpgrade(),我们要在类里面重写这两个方法来实现 ...

  4. CentOS隐藏nginx版本号

    在/usr/local/nginx/conf/目录中,修改nginx.conf文件 在http {  }段中加入 http { server_tokens off; }

  5. CI框架篇之预热篇(1)

    CodeIgniter 的基本都了解了,现在就开始预热,如果学习一门语言一样,我们最开始都是输出一个'HELLO WORLD'一样, 现在我们也通过输出这样一个内容,来了解基本的使用. CodeIgn ...

  6. SOCKET,TCP/UDP,HTTP,FTP

    (一)TCP/UDP,SOCKET,HTTP,FTP简析 TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层: 网络层:IP协议.ICMP协议.ARP协议.RARP协议和BOOTP协议 传 ...

  7. C#和SQL操作Xml

    #region DataTableToXml        public static string DataTableToXml(System.Data.DataTable Dt)        { ...

  8. JavaScript 快速入门回顾

    数据类型Number JavaScript不区分整数和浮点数,统一用Number表示,以下都是合法的Number类型: 123; // 整数123 0.456; // 浮点数0.456 1.2345e ...

  9. Codevs 4768 跳石头 NOIP2015 DAY2 T1

    4768 跳石头 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 传送门 题目描述 Description 一年一度的"跳石头"比赛又要开始了! ...

  10. linux服务端的网络编程

    常见的Linux服务端的开发模型有多进程.多线程和IO复用,即select.poll和epoll三种方式,其中现在广泛使用的IO模型主要epoll,关于该模型的性能相较于select和poll要好不少 ...