在Spring Boot中启用Http2.0
HTTP2.0特性
- 通俗易懂篇:https://www.cnblogs.com/yingsmirk/p/5248506.html
- 深入了解篇:https://www.jianshu.com/p/67c541a421f9
使用HTTP/2的几点注意事项
要使用HTTP/2需要注意以下几点
- 虽然HTTP/2没有明确要求必须使用
TLS
,但当前几乎所有浏览器均只支持 HTTP/2 Over TLS。所以在使用之前我们需要先制作一张证书。 - 如果您的项目中用的是
tomcat
或jetty
,它们并不能直接支持HTTP/2,但是undertow
可以。具体可以参考Spring Boot的文档:https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#howto-configure-http2 - 我们制作的证书是不被浏览器认可的,所以会有安全提示,不能用于生产环境。
在本文的例子中使用的是
undertow
制作证书
使用JDK自带的keytool
,证书类型为:PKCS12
keytool -genkey -alias undertow -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -dname "CN=localhost, OU=localhost, O=localhost, L=Zhengzhou, ST=Henan, C=CN"
输入密钥库口令:
再次输入新口令:
执行时会要求输入证书口令,这里输入的是123456
。执行完命令后会在执行的文件夹生成一个keystore.p12
的文件。
keytool的详细用法: https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html
常见的证书格式及其说明参考:http://www.cnblogs.com/xq1314/archive/2017/12/05/7987216.html
配置Web容器
spring boot默认使用的是tomcat,我们需要先将tomcat
移除,然后换成undertow
。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></exclusion></exclusions>
</dependency>
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-undertow</artifactId>
</dependency>
如果不移除tomcat依赖会一直以Tomcat作为容器启动。
然后将刚才生成的keystore.p12
拷贝到src/main/resources
下。然后在application.yml
中配置服务器信息。
server:port: 8443 # 端口compression:enabled: truehttp2:enabled: true # 启用http2ssl:enabled: truekey-store: classpath:keystore.p12 # 启用http2key-store-password: 123456 # 证书密码key-store-type: PKCS12 # 证书类型protocol: TLSv1.2 # 协议类型key-alias: undertow
这时如果启动服务器,是只支持https
的。
@SpringBootApplication
public class RabbitmqProducerApplication implements WebServerFactoryCustomizer<UndertowServletWebServerFactory> {public static void main(String[] args) {SpringApplication.run(RabbitmqProducerApplication.class, args);}@Overridepublic void customize(UndertowServletWebServerFactory factory) {factory.addBuilderCustomizers((UndertowBuilderCustomizer) builder -> {builder.addHttpListener(8080, "0.0.0.0");});}
}
这里增加8080
端口的监听,配置参考:
- https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#howto-configure-webserver
- https://docs.spring.io/spring-boot/docs/2.0.5.RELEASE/reference/htmlsingle/#howto-enable-multiple-listeners-in-undertow
启动后可以看到控制台打印出如下信息:
INFO 4288 --- [ main] o.s.b.w.e.u.UndertowServletWebServer : Undertow started on port(s) 8443 (https) 8080 (http) with context path ''
测试
增加一个测试控制器
@RestController
@RequestMapping("/log")
public class LogController {private Logger logger = LoggerFactory.getLogger(LogController.class);@GetMapping("/info")public String info() {logger.info("Info log");return "info";}
}
访问:https://localhost:8443/log/info,观察控制台protocol
为h2
,说明这次请求使用的是HTTP/2
协议。
再次请求
观察两次请求的size,一次是236
一次是69
,这是因为HTTP/2
的头部压缩技术。
访问:http://localhost:8080/log/info,观察控制台可以看到使用的仍然是HTTP/1.1
协议
而且数据包要比HTTP/2
的数据包大,并且无论刷新多少次,大小是不变的。
在Spring Boot中启用Http2.0相关推荐
- Spring Boot中使用Swagger3.0.0版本构建RESTful APIs
文章目录 一.项目描述 二.简介 三.Swagger2.X和Swagger3.0.0 的对比 1)SpringFox 2.x 发布 2)SpringFox 3.0.0 发布 3)swagger3.0 ...
- 在SpringBoot中启用Http2.0
HTTP2.0特性 虽然没有官方明确必须使用https,但是浏览器默认使用https才能使用http2.0发起请求. 虽然HTTP/2没有明确要求必须使用TLS,但当前几乎所有浏览器均只支持 HTTP ...
- spring boot 中启用 https
为什么80%的码农都做不了架构师?>>> 获取证书 https 是加密链接. 是需要证书的. 那么证书从哪里取得呢? 在本地测试的时候, 可以自己生成一个 tomcat 的证书, 可 ...
- Spring Boot 中启用异步调用
在Java中一般开发程序都会同步调用的,程序中代码是一行一行执行下去的,每一行代码需要等待上一行代码执行完成才能开始执行. 在异步编程中,代码执行不是阻塞的,在方法调用中不需要等待所有代码执行完毕就可 ...
- 使用Spring Security在Spring Boot中进行缓存
在这篇文章中,我想分享一下O&B的一个团队的经验教训. 他们正在使用带有Spring Security的Spring Boot. 默认情况下,Spring Security保护的所有内容都将通 ...
- Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题
Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题 参考文章: (1)Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代 ...
- boot spring 接口接收数据_在 Spring Boot 中使用 Dataway 配置数据查询接口
Dataway介绍 Dataway 是基于 DataQL 服务聚合能力,为应用提供的一个接口配置工具.使得使用者无需开发任何代码就配置一个满足需求的接口. 整个接口配置.测试.冒烟.发布.一站式都通过 ...
- Spring Boot中使用AOP统一处理Web请求日志
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是Spring框架中的一个重要内容,它通 ...
- 在spring boot中集成Swagger
Swagger 在spring boot中集成Swagger 新建一个swagger项目 maven依赖 <!-- https://mvnrepository.com/artifact/io.s ...
最新文章
- 基因课 15天入门生物信息(2021年) 第三天 Linux基础命令(1)
- avalov+require实现tab栏
- Java设计模式(学习整理)---命令模式
- 智游推送教你如何使用统计图表辅助运营
- SQL2K数据库开发二十六之存储过程操作创建存储过程(一)
- jsf集成spring_Spring和JSF集成:分页
- micropython stm32f407 以太网_[MicroPython]STM32F407开发板DIY声光控开关
- Diango博客--24.单元测试:测试评论应用
- 《菜菜的机器学习sklearn课堂》sklearn入门与决策树
- StringBuffer的基本使用
- 汇编语言王爽第四版 第六章内容解读(附实验五答案解析)
- 小程序毕设作品之微信小程序点餐系统毕业设计(1)开发概要
- VUE PDF上传预览下载(vue-pdf)
- 坐标计算机在线使用,caslo计算器计算坐标的方法
- SDK数据采集抓取精准主要
- 那些口碑炸裂的免费远程控制软件!
- 京东2021年全渠道GMV同比增长近80% 全年营收同步增长27.6%
- [luogu]P1852跳跳棋
- 很多APP都支持了 “本机号码一键登录”,知道是怎么实现么?
- linux 画面好 游戏,2017年13款画面最优秀的游戏!极致画面美到惊叹