springboot http2
转 Spring Boot With Http2
原文链接 http://www.jianshu.com/p/3d7ac535d6a0
拓展链接 http://www.jianshu.com/p/9710585258fb
HTTP/2是第二代的HTTP协议,大家可以通过https://http2.akamai.com/demo来感受下Http2
的提速。
Spring Boot
的web容器选择中已经有Undertow
和Jetty
两个容器可以支持HTTP/2了,这个例子中我选择了Undertow
作为Spring Boot
的web容器。
制作一份证书
虽然Http2
没有强制要求使用TLS
,但当前几乎所有浏览器均只支持 HTTP/2 Over TLS。这样做一方面更安全,另一方面利用 TLS
的加密机制可以更好地穿透网络中间节点。所以在我们模拟一个Http2服务之前,我们需要产生一份本地的Https证书为后面的试验做准备。
Java自带了一个密钥管理工具--keytool
,利用这个工具,我们可以产生一份自签名的证书。
keytool -genkey -alias undertow -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -dname "CN=localhost, OU=localhost, O=localhost, L=hangzhou, ST=zhejiang, C=CN"
执行这条命令之后,在执行命令的目录下会产生一个keystore.p12
的PKCS12
证书,很快我们就会在Spring Boot中使用到这份证书。
不能落下的ALPN
ALPN是Application Layer Protocol Negotiation的缩写,是 HTTP/2 的一种协议协商机制:
- 客户端发起请求,只有请求报头,期望与服务端建立连接。
- 服务端如果支持HTTP/2,会返回一个
Upgrade
请求,与客户端协商是否切换到HTTP/2。 - 当双方都支持HTTP/2的情况下,HTTP协议会使用HTTP/2,而当出现问题时,则使用HTTP/1.1。
为了让JVM支持这种机制,需要引入Jetty
的alpn_boot
,并在项目启动的过程前使用命令:
java -Xbootclasspath/p:<path_to_alpn_boot_jar> ...
对于不同版本的JDK,也需要采用不同版本的alpn_boot
,详情可以参见:http://www.eclipse.org/jetty/documentation/9.4.x/alpn-chapter.html#alpn-versions
启动一个Http2服务
Http2的这个例子是基于之前undertow的Demo做的,在配置类中务必添加这个配置,来启用undertow
中的Http2
功能:
@Bean UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory() { UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory(); factory.addBuilderCustomizers(builder -> builder.setServerOption(UndertowOptions.ENABLE_HTTP2, true)); return factory; }
在application.properties
中添加Https
的相关配置:
server.port=8443 server.ssl.key-store={path}/keystore.p12 server.ssl.key-store-password=password server.ssl.keyStoreType=PKCS12 server.ssl.keyAlias=undertow server.ssl.protocol=TLSv1.2
我们编写一个可以被访问的Controller:
@RestController @RequestMapping("/test") public class HiController { @RequestMapping("/hello") public String hello() { return "world"; } }
启动Application
类时,VM的参数中需要记得加入alpn_boot
的配置。
此时打开Chrome
,访问https://localhost:8443/test/hello

由于我们产生的证书是自签名的证书,并不会被浏览器认可,所以会被标记成不安全,但是并不影响我们对的TLS
使用,通过chrome的插件可以看到网站已经采用了HTTP/2。
springboot http2的更多相关文章
- SpringBoot标准Properties
# =================================================================== # COMMON SPRING BOOT PROPERTIE ...
- springboot application.properties 常用完整版配置信息
从springboot官方文档中扒出来的,留存一下以后应该会用到 # ================================================================= ...
- java框架之SpringBoot(2)-配置
规范 SpringBoot 使用一个全局的配置文件,配置文件名固定为 application.properties 或 application.yml .比如我们要配置程序启动使用的端口号,如下: s ...
- SpringBoot全局配置文件
SpringBoot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到r ...
- spring boot http2
项目已启动的情况下,启动单元测试报端口has binded 可以使用server.port=-1 禁用端口绑定来启动单元测试 https://docs.spring.io/spring-boot/do ...
- SpringBoot常用应用程序属性
参考地址: https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.h ...
- http2及server push
本文主要研究下java9+springboot2+undertow2启用http2及server push maven <parent> <groupId>org.spri ...
- SpringBoot嵌入式Tomcat的自动配置原理
在读本篇文章之前如果你读过这篇文章SpringBoot自动装配原理解析应该会更加轻松 准备工作 我们知道SpringBoot的自动装配的秘密在org.springframework.boot.auto ...
- SpringBoot以WAR包部署遇到的坑---集合贴
⒈忽略tomcat的context-path 方式一: 停止tomcat服务,删除tomcat安装目录的webapps目录下的ROOT目录,将打成的WAR包重命名为ROOT.war,重启tomcat服 ...
随机推荐
- eclipse启动优化文章集合
1. eclipse启动优化,终于不那么卡了! http://www.cfei.net/archives/445
- sublime同步侧边栏与窗体的颜色
Ctrl+Shift+P -> install -> 搜索安装包 SyncedSidebarBg,自动同步侧边栏底色为编辑窗口底色. P.S. 有时改完后侧边栏颜色没变化,不知什么原因,打 ...
- 隐马尔可夫模型HMM与维特比Veterbi算法(一)
隐马尔可夫模型HMM与维特比Veterbi算法(一) 主要内容: 1.一个简单的例子 2.生成模式(Generating Patterns) 3.隐藏模式(Hidden Patterns) 4.隐马尔 ...
- C#.NET常见问题(FAQ)-如何修改代码字体
工具-选项-字体和颜色 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 我的在线论坛: http://csrob ...
- freemarker 模板开发入门
数据模型 scalars标量:从根 root 開始指定它的路径,每级之间用点来分隔. 如:whatnot.fruits sequences 序列:使用数组的方括号方式来訪问一个序列的子变量. 如:an ...
- DHTML【9】--Javascript
大家好,好长时间不见了,因为博主最近在驾校学习开车,所以耽误了DHTML的更新日程,对此实感愧疚. 好了,不再得瑟了,接下来该介绍DHTML中比较核心的一个东东—Javascript. 初看Javas ...
- Win10 专业版激活!
从Win8.1(无论盗版正版),只要符合计算机处理器位数(32或64),就可以 利用: QJNXR-YD97Q-K7WH4-RYWQ8-6MT6Y 激活你的永久Win10,且激活后记录当前设备信息,版 ...
- PACS系统简易
PACS系统 http://baike.baidu.com/link?url=prHBMbyu5W98ET1UGQ0PXXxLebxAeljckFH0pfO_2aODe1UgsrWgRd4Unbopt ...
- eclipse 修改maven项目的jdk版本
eclipse 修改maven项目的jdk版本 CreationTime--2018年6月8日10点29分 Author:Marydon 1.情景展示 jdk版本太低,如何修改 2.错误方式 第一 ...
- 【Docker】容器中找不到vi命令
在Docker容器中找不到vi命令 解决办法: 1.通过命令获取最新的软件包 apt-get-update 2.安装vi命令 apt-get install vim 安装过程中提示是否进行输入Y即可. ...