HTTP/1.0、HTTP/1.1和HTTP/2.0

前言

面试经常会问HTTP/1.0和HTTP/2.0的区别,所以就准备配一下HTTP/2.0,HTTP协议是配置在Web服务器中的,拿tomcat试试手。

Tomcat 9配置HTTP/2.0

运行tomcat,访问http:localhost:8080,通过开发者工具可以看到protocol一栏是http/1.1表示使用的是HTTP/1.1协议。没有protocol这一栏的话,可以右键属性栏,然后可以选择

http-protocol

生成证书

目前浏览器想要使用HTTP/2.0,必须要开启SSL,所以先要获取证书

windows系统可以参考tomcat + http2.0配置https://www.kancloud.cn/pimingzhao/web_serve/1414096

我是使用了Windows Terminal,搭建了Linux环境,这样就可以直接使用Linux命令了。

# 如果是Ubuntu系统
openssl genrsa -out server.key 2048
openssl rsa -in server.key -out server.key
openssl req -new -x509 -key server.key -out ca.crt -days 3650

将生成的ca.crtserver.key复制到tomcat的config目录下

打开tomcat的配置文件server.xml

    <!--
    <Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
                         certificateFile="conf/localhost-rsa-cert.pem"
                         certificateChainFile="conf/localhost-rsa-chain.pem"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>
	-->

将这一段改为

	<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
            <!--主要是这里更改证书的路径 -->
            <Certificate certificateKeyFile="conf/server.key"
                         certificateFile="conf/ca.crt"
                         type="RSA" />
        </SSLHostConfig>
    </Connector>

重启tomcat 访问https://localhost:8443/

http-protocol1

这样就可以看到Protocol变成了h2,h2表示使用了TLS的HTTP/2.0协议。

HTTP/2.0和HTTP/1.1

https://http2.akamai.com/demo从这个网站可以看到HTTP/2.0和HTTP/1.1在速度上的差异

http-speed

HTTP1.1

  • 持久连接
  • 请求管道化
  • 增加缓存处理(新的字段如cache-control
  • 增加Host字段、支持断点传输等

HTTP2.0

  • 二进制分帧,HTTP1.x的解析是基于文本,2.0将报文消息划分为更小的数据帧,以二进制传输代替原本的明文传输
  • 多路复用(或连接共享)
  • 头部压缩
  • 服务器推送

参考

HTTP2 详解

https://juejin.cn/post/6844903489596833800#comment