为什么要在SpringBoot中启用HTTP2
启用HTTP2可以带来更高效的数据传输、更优的性能表现以及更好的用户体验。
-
二进制格式传输数据:HTTP2采用二进制格式传输数据,而非HTTP1.x的文本格式,这使得协议解析更高效,且便于扩展。
-
头部压缩:HTTP2对消息头采用HPACK进行压缩传输,能够节省消息头占用的网络流量,而HTTP1.x每次请求都会携带大量冗余头信息,浪费了带宽资源。
-
异步连接多路复用:HTTP2支持在单个TCP连接上并行执行多个请求,而HTTP1.x中的Pipelining存在头阻塞问题,即后面的请求需要等待前面的请求完成才能执行。
-
Server Push:服务器端可以主动推送资源到客户端,而不需要客户端解析到相应位置后发起请求。
-
性能提升:HTTP2的多路复用和服务器推送特性可以显著提升web性能,特别是在网络延迟较大或请求数目较多的情况下。
-
保持向后兼容性:HTTP2保持了与HTTP 1.1的语义向后兼容性,这意味着可以在不改变现有应用逻辑的情况下进行升级。
充分必要条件
-
确保使用的Spring Boot版本支持HTTP/2:
- Spring Boot 2.0及以上版本支持HTTP/2。
-
使用支持HTTP/2的Servlet容器:
- Tomcat 9及以上、Jetty 9.4及以上和Undertow都支持HTTP/2。
- 生成SSL证书
启用HTTP2的步骤
在SpringBoot中启用HTTP2的步骤如下
-
使用支持HTTP2的Servlet容器:SpringBoot支持在Tomcat 9+、Jetty 9.4+、Undertow 1.4+等Servlet容器中启用HTTP2。
-
配置SSL:由于HTTP2通常需要基于SSL协议,因此需要配置SSL证书。可以通过以下命令生成密钥库(keystore):
keytool -genkey -keyalg RSA -alias wisely -keystore keystore.jks -storepass pass1234 -validity 4000 -keysize 2048
然后在SpringBoot的配置文件中添加SSL配置:
server:port: 8080http2:enabled: true #启用http2ssl: #添加证书key-store: classpath:keystore.jkskey-store-password: root123key-store-type: JKSkey-alias: zhengkai.blog.csdn.net/key-password: root123
-
启用HTTP2:在SpringBoot的配置文件中启用HTTP2,只需添加以下配置:
server:http2:enabled: true