HTTP3协议基于Google的 QUIC 协议,由互联网工程任务组(IETF)来制定。目录仍是草案,已经进行到第33版。chrome
HTTP3 是基于 QUIC 协议的 http。传输层是UDP+QUIC,应用层还是HTTP,即request/respose, request里也还是method, url, headers, body等等,从应用层的角度来看,你的代码无需修改就能够迁移到新的协议版本上来。shell
检查网站是否支持http3协议:浏览器
https://http3check.net/?host=...缓存
curl
工具从7.67之后的版本增长对http3的实验性支持。安全
curl --http3 https://nghttp2.org:8443/
检查浏览器是否支持http3协议:服务器
今年10月,Facebook 号称超 75% 的流量已使用 QUIC 和 HTTP/3协议。app
与http2同样,http3也采用加密的二进制协议,不一新的是http3是基出UDP协议的。curl
关于为何http3会采用UDP协议,带来了哪些好处,能够参考http3详解。 cURL的做者 Daniel Stenberg 对此有很详细的说明。包括协议僵化、TCP队关阻塞、减小延迟、安全等都有说明,且有中文译文,值得一看。工具
一些相关规范草案:
当有人在浏览器中输入您网站的地址时,幕后发生了不少事情……
0-RTT 零往返时间恢复, 最先是TLS 1.3 提出和一种恢复链接的机制。即恢复连接时直接使用以前已经交换地的密钥加密应用数据,而无需再经历单独的创建 TCP 链接和 TLS 交换密钥的客户端服务器以前的数据往返。
0-RTT容许在无需任何往返的状况下恢复会话。
这里给一个总结...
TLS 1.2(及更低版本)
TLS 1.3
具备0-RTT的TLS 1.3
从理论上讲,0-RTT由于使用之前的密钥,确实能够对网站来进行重放攻击。所以,在实施时须要一直保持谨慎,通常仅容许GET请求与0-RTT一块儿使用。因为GET请求永远不要修改服务器上的任何内容,只能返回结果,这意味着网站风险更小。
打开 https://http3.is/ 网站:
普通青年看到的是这样的一个画面:
文艺青年用Mac对chrome加参数打开:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --enable-quic --quic-version=h3-29
则看到了这样的画面:
mp4
同时在开发者工具栏会看到h3-29协议:
若是第一连接时没有显示动画,观察一下服务器的响应头,能够看到:
alt-svc: h3-29=":443";ma=86400,h3-27=":443";ma=86400
这实际是在告诉客户端能够升级到h3协议上。这时再刷新页面,chrome会切换到h3协议上去。这样就实现了新旧协议的过渡升级。