spring boot http2
HTTP/2是第二代的HTTP协议 , 具体就不多说,协议参考 HTTP/2 ,中文翻译版参考HTTP/2中文翻译
环境配置
- JDK8
- undowtow 1.4.0+
- spring boot 2
之所以用 undowtow 而不用 tomcat或jetty 是因为JDK8是不支持HTTP/2 , JDK9支持,而undowtow 1.4.0+服务器用JDK8 就可以支持HTTP/2。若用tomcat或jetty则需要额外加载 ALPN 具体参考springboot官方文档
生成证书
HTTP/2 支持明文 HTTP 传输,但是目前浏览器只会实现基于TLS的HTTP/2,要想升级成HTTP/2首先升级HTTPS ,考虑到协议证书都需要花钱而免费的协议证书(如:Let’s Encrypt ,StartSSL)申请比较麻烦。这里我们由jdk自带的keytool工具生成自签证书。在jdk bin 目录下执行命令
1 | keytool -genkey -alias hjforever -storetype PKCS12 -keyalg RSA -keypass 123456 -keysize 1024 -validity 365 -keystore D:\keys\hjforever.p12 -storepass 123456 |
具体说明:
keytool
-genkey
-alias hjforever(别名)
-keypass 123456(别名密码)
-storetype PKCS12(密钥类型)
-keyalg RSA(算法)
-keysize 1024(密钥长度)
-validity 365(有效期,天单位)
-keystore D:/keys/hjforever.p12(指定生成证书的位置和证书名称)
-storepass 123456(获取keystore信息的密码)
项目配置
1 | server.http2.enabled=true |
具体项目demo地址为 https://github.com/hjforever/spring-boot-sample/tree/master/springboot-http2 ,证书生成后将配置中的证书地址设置为你本地证书的地址 。
测试
启动服务,在谷歌浏览器中访问 https://localhost:8443/user/1 , 在新的标签页中输入 chrome://net-internals/#http2 则会看到以下页面,其中localhost:8443已经是h2协议了。
点击对应的ID则可以看到具体的报文信息