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
2
3
4
5
6
7
8
9
server.http2.enabled=true
#证书
server.ssl.key-store=D:/keys/hjforever.p12
#别名密码
server.ssl.key-store-password=123456
#证书类型
server.ssl.key-store-type=PKCS12
#别名
server.ssl.key-alias=hjforever

具体项目demo地址为 https://github.com/hjforever/spring-boot-sample/tree/master/springboot-http2 ,证书生成后将配置中的证书地址设置为你本地证书的地址 。

测试

启动服务,在谷歌浏览器中访问 https://localhost:8443/user/1 , 在新的标签页中输入 chrome://net-internals/#http2 则会看到以下页面,其中localhost:8443已经是h2协议了。

Alt text

点击对应的ID则可以看到具体的报文信息

Alt text