作者:lly
文章目录
一、背景
1.1 什么是HTTP/2
HTTP是指超文本传输协议,它是个简单的请求-响应协议,通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。我们目前广泛的HTTP是HTTP/1.1;而HTTP/2则是超文本传输协议 2.0,是下一代HTTP协议。
1.2 HTTP/2有什么优势
-
二进制传输
HTTP/2采用二级制传输,相对于HTTP/1提高了文本传输的安全性。 -
多路复用
HTTP/1一个连接只能提交一个请求,而HTTP/2能同时处理多个请求,从而降低连接的数量,提高网络的吞吐量。 -
头部压缩
HTTP/2对头部进行了压缩,并且在客户端与服务端各维护了一份头部索引表,只需要根据索引ID就可以进行头部信息的传输,缩小了头部容量,提升了传输效率。 -
服务端推送
HTTP/2可以主动推送资源到客户端,避免客户端花过多时间逐个请求,降低响应时间。
由此可见,HTTP/2在安全和性能上,对比HTTP/1,都有提升。接下来我们就看看如何使用iServer配置HTTP/2协议。
二、SuperMap iServer如何配置HTTP/2
本文主要介绍生成使用未经过权威机构认证证书来配置HTTP/2,主要步骤有以下几步:
1.安装 OpenSSL生成CA证书
2.配置SuperMap iServer server.xml文件
3.重启SuperMap iServer
对于直接拥有权威机构认证证书的小伙伴,可以忽略第一步。
2.1 安装 OpenSSL生成证书
1.下载对应Bin包,并将对应文件复制到{JAVA_HOME}/bin/中
32位系统解压文件中的bin/openssl.exe, bin/tcnative-1.dll bin/tcnative-1-src.pdb到{JAVA_HOME}/bin/中
64位系统解压文件中的bin/openssl.exe, bin/x64/tcnative-1.dll bin/x64/tcnative-1-src.pdb到{JAVA_HOME}/bin/中
2.生成证书
(1) 生成一个RSA私钥
openssl genrsa -out server.key 2048
(2)生成免密key
openssl rsa -in server.key -out server.key
(3)制作CA证书
openssl req -new -x509 -key server.key -out ca.crt -days 3650
注:如果报错Can’t open C:\Program Files\Common Files\ssl/openssl.cnf for reading,则指定相应的openssl.cnf文件后,执行以下指令,再制作CA证书
set OPENSSL_CONF=D:\pkgs\openssl-1.1.1m-h2bbff1b_0\Library\ssl\openssl.cnf
2.2 配置server.xml
在iServer根目录/conf下找到server.xml,将一下代码粘贴到Service节点中,并将证书替换为你自己生成的证书名称和位置
<Connector port="8443" address="0.0.0.0" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="D:\server.key"
certificateFile="D:\ca.crt"
type="RSA" />
</SSLHostConfig>
</Connector>
2.3 验证
重启iServer后,访问https://localhost:8443,打开控制台查看网络,我们可以看到协议为HTTP/2(目前主流浏览器 HTTP/2 的实现都是基于 SSL/TLS 的,也就是说使用 HTTP/2 的网站都是 HTTPS 协议的,所以这里使用的HTTPS协议头)
这里再附上改动前的HTTP/1协议对比
三、总结
执行以上操作,我们就完成了HTTP/2协议的配置,通过验证我们可以看到,由于新协议具备二进制传输,服务端推送等多个改动,我们的资源响应时间得到了提升,并且由于基于SSL/TLS,系统安全性也得到了保障;HTTP/2协议克服HTTP/1存在的延迟难以下降、并发连接有限等等问题,感兴趣的小伙伴快来试试吧。