尝鲜 HTTP/3 协议

最近,HTTP-over-QUIC协议被正式称为HTTP/3,QUIC 协议是 google 开发的一套协议,IETF 中的 QUIC 工作组致力于创建 QUIC 传输协议。 QUIC 是基于 UDP 实现的协议,是用来替换 TCP 的。QUIC 协议最初是由Google发起的项目,后面慢慢成为了 HTTP/2-encrypted-over-UDP 协议。

由于目前主流的 web 服务器,例如 nginx 是不支持 quic 协议的,因此我们采用 caddy 这个 web 服务器才实现 对 quic 协议的支持。

关于 quic 协议的简单介绍,你可以看下 https://zhuanlan.zhihu.com/p/32553477

实现原理,首先客户端发起 tcp 连接判断服务端响应头是否有 alt-svc 头,如有则尝试使用 udp 443 去进行连接。

nginx 配置

nginx 只需要增加一行

add_header alt-svc 'quic=":443"; ma=2592000; v="44,43,39"';

caddy 容器

docker pull hub.c.163.com/fangwenjun/caddy/caddy:v1

启动容器

docker run --restart=always  -d -p 443:443/udp --name awen-blog -v /usr/local/nginx/ssl/:/conf/ -v /www/www/:/www/  -v /www/caddy/:/caddy-conf/ c237fe021a1b caddy -quic -conf /caddy-conf/conf

conf 文件配置

https://awen.me
tls /conf/awen.me.ecc.cer /conf/awen.me.ecc.key
root /www/
gzip

配置完毕后记得放行 udp 443 端口,就可以通过浏览器访问了

chrome 配置

1.开启 quic 的支持,chrome://flags 安装如图所示 Experimental QUIC protocol 设置为 enable 重启浏览器

安装 HTTP/2 and SPDY indicator

https://chrome.google.com/webstore/detail/http2-and-spdy-indicator/mpbpobfflnpcgagjijhmgnchggcjblin

你可以访问 google 试试

右上角有个闪电图标会显示 google 已经开启 quic/43版本的支持。

然后访问博客也和 google 一样呈现绿色闪电图标了。

打开 chrome://net-internals/#quic 也可以看到当前使用 quic 协议的站点连接情况

wireshark 抓包 可以看到有 GQUIC 也说明启用 quic 协议成功了。