这篇文章给大家分享的是有关HTTP3的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

HTTP3是HTTP协议的最新版本。从诞生之初,HTTP就是交换超文本文档的首选应用层协议。多年来,为了跟上互联网的发展,以及WWW上交换的内容种类增加,HTTP进行了几次重大升级,而HTTP/3就是目前的最新版本。

HTTP 2问题

前篇已整体介绍HTTP 2,就此,此篇只说下HTTP/2的问题

在底层使用了TCP的情况下,TCP的慢启动;拥塞窗口尺寸设置不合理导致的性能急剧下降的问题没有得到解决。基因在此,无法改变
HTTP 2多路复用只是减少了连接数,队头阻塞的问题并没有得到完全解决。如果TCP丢包率超过2%,HTTP/2表现将不如HTTP1.1。因为HTTP1 是分开使用的TCP连接,具体对比如下示意图所示:
HTTP 3

HTTP 3是在QUIC基础上发展出来的。底层使用UDP进行数据传输,但上层仍然使用HTTP/2。HTTP2与UDP之前存在一个QUIC层,TLS加密过程在此层处理。QUICK存在两个版本,早期Google打头阵的QUIC称之为gQUIC,IETF标准化后称之为IQUIC。与HTTP对比,HTTP/3整体如下:

整个HTTP家族对比如下:

HTTP3特点:

使用UDP作为传输层进行通信
从协议本身保证了安全性,QUIC在建立连接的握手过程中就完成了TLS加密握手
建立连接快,正常只需要1RTT即可建立连接。如果有缓存之前的secret信息,则直接验证和建立连接,此过程0RTT。建立连接时,也可以带有少量业务数据。
不和具体底层连接绑定,QUIC为每个连接的两端分别分配了一个唯一ID,上层连接只认这对逻辑ID。网络切换或者断连时,只需要继续发送数据包即可完成连接的建立
使用QPACK进行头部压缩,因为HPACK要求传输过程有序,这会导致队头阻塞。而QPACK不存在这个问题
HTTP/3在header中定义了一个新header:Alt-Svc: h4=":20003":表示服务器在20003端口开了一个20003端口用于HTTP/3服务
补充

使用以下代码可以判断是否有使用HTTP/2

(function(){//保证这个方法只在支持loadTimes的chrome浏览器下执行if(window.chrome&&typeofchrome.loadTimes==='function'){varloadTimes=window.chrome.loadTimes();varspdy=loadTimes.wasFetchedViaSpdy;varinfo=loadTimes.npnNegotiatedProtocol||loadTimes.connectionInfo;//就以「h3」作为判断标识if(spdy&&/^h3/i.test(info)){returnconsole.info('本站点使用了HTTP/2');}}console.warn('本站点没有使用HTTP/2');})();


感谢各位的阅读!关于“HTTP3的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!