# HTTP2 的优势和 Nginx 配置 HTTP2 的简单使用

# HTTP2 的优势

  • 新的二进制格式(Binary Format),HTTP1.x 的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认 0 和 1 的组合。基于这种考虑 HTTP2.0 的协议解析决定采用二进制格式,实现方便且健壮。

  • 多路复用(MultiPlexing),即连接共享,即每一个 request 都是是用作连接共享机制的。一个 request 对应一个 id,这样一个连接上可以有多个 request,每个连接的request 可以随机的混杂在一起,接收方可以根据 request 的 id 将 request 再归属到各自不同的服务端请求里面。

  • header 压缩,HTTP1.x 的 header 带有大量信息,而且每次都要重复发送,HTTP2.0 使用 encoder 来减少需要传输的 header 大小,通讯双方各自 cache 一份 header fields 表,既避免了重复 header 的传输,又减小了需要传输的大小。

  • 服务端推送(server push),同 SPDY 一样,HTTP2.0 也具有 server push 功能。

  • 分帧传输:可以并发发送不同请求。

# Nginx 配置 HTTP2 的简单使用

需要注意的是:目前来说在 https 的请求下才能开启 http2;

    server {
      listen       8777 default_server;
      listen       [::]:8777 default_server; # 使用 IP 的情况下
      server_name localhost;
      return 302 https://$server_name$request_uri; # server_name 就是前面指定的 localhost,request_uri 就是具体访问的路径
    }
    # 表示要启动一个服务
    server {
        # 开启 ssl 加密算法以及 http2
        listen       443 ssl http2; # 服务监听的端口-https默认使用端口
        server_name  localhost; # 浏览器访问的 host name
        http2_push_preload on; # 开启服务器端推送
        # 指定对应的证书
        # 相对路径-证书存放的路径
        ssl_certificate_key ../certs/localhost-privkey.pem;
        ssl_certificate  ../certs/localhost-cert.pem;
        # 要代理的路由
        location / {
          # 匹配到 localhost:9999/ 代理到下面的地址
          proxy_pass http://localhost:8888;
        }
    }

结果:

可以看到我们的请求已经变成了 http2 协议;

在这里插入图片描述

在 git bash 中可以使用 curl -v -k http://localhost:8777 去发送请求

评 论:

更新: 11/21/2020, 7:00:56 PM