首页 > 其他分享 >HTTP/3,它来了!

HTTP/3,它来了!

时间:2023-06-29 18:55:34浏览次数:41  
标签:TLS 协议 HTTP TCP QUIC 连接

首先,我们先来介绍一下HTTP/2,HTTP/2通过二进制传输、多路复用、Header压缩、Server Push等特性大大地提升了HTTP/1.x的性能,但是由于HTTP/2是基于TCP协议实现的,TCP本身特性导致其必然存在一定的瓶颈及缺陷。

HTTP/2缺陷:

Head-Of-Line Blocking(队头阻塞):HTTP/2多个请求都是在一个TCP连接中进行的,如果TCP传输时出现丢包,那么整个TCP就要等待重传,这样就会导致该TCP连接中的所有请求被阻塞。举个例子,见下图:

 

从上图可以看到发送端一共发送了四包packet,其中packet 3在网络层丢失了,即使packet4被接收方的内核接收到,但因为在内核中其数据并不是连续的,导致接收端的应用层无法读取,只有等到packet3重传后,应用层才可以从内核中读取数据。

TCP和TLS握手时延:

TCP协议需要通过三次握手来建立TCP连接确保通信的可靠性(1.5个RTT),

TLS_V1.2协议会在TCP协议之上通过四次握手建立TSL连接保证通信的安全性(2个RTT),HTTP协议会在TCP与TLS上发送请求并接收响应(1个RTT)。

这意味着,假如我们想要访问美国的服务器,RTT约为250ms时,那么此时HTTPS请求的耗时大概要为1s左右,这就比较高了。

连接迁移需要重新连接

一个TCP连接是由源IP地址、源端口、目标IP地址以及目标端口来确定的。这表示如果端口或者IP地址发生变动,就需要重新让TCP和TLS进行连接。这不适于设备切换网络的场景。

上面这三个问题其实都是TCP协议固有的问题,无论HTTP/2应用层怎样进行设计,都改变不了这些缺陷,要想解决其根本,就需要将传输层协议TCP更换为UDP,而HTTP 3.0就是这样做的!

我们知道UDP是一种简单、不可靠的传输协议。当然HTTP 3.0也不仅仅只是将传输协议由TCP替换为UDP,它还基于UDP在应用层实现一个叫作QUIC的协议,这个协议具有与TCP类似的连接管理、拥塞控制等特性,可以将UDP变得“可靠”。

下面介绍QUIC协议的优点:

无队头阻塞:

QUIC使用的传输协议是UDP,其不关心数据包的顺序或者数据包丢失,但是 QUIC会保证数据包的可靠性,每个数据包都会有一个唯一标识,当某个stream的一个数据包丢失。这个stream的其他数据包即使到达了HTTP,也不会被读取,直到QUIC重传丢失的数据。

与HTTP/2不同的是其他stream不会因此受到影响。

连接建立更快:

QUIC内部包含了TLS_V1.3,它在数据帧中会携带TLS里的信息。并且QUIC不需要像HTTP/2通过TCP+TLS握手,它的握手过程仅需要1RTT,握手的目的在于确认双方的连接ID。因此QUIC仅需一个RTT就可以同时完成连接建立与加密密钥。甚至它在第二次连接时,应用数据包可以与QUIC握手信息一并发送,达到0-RTT的效果。

支持连接迁移:

QUIC协议没有用IP地址和端口来确定连接,而是通过连接ID来标记通信两端,即使设备的网络发生变化后,导致IP地址变化,只要仍保有上下文信息(例如连接ID、TLS信息),就可以无缝复用原连接。

HTTP 3.0 利用QUIC作为底层支撑协议,其融合UDP协议的速度、性能与TCP的安全可靠,解决了HTTP/2中引入的一些缺点,优化了互联网的传输体验。相信在未来HTTP 3.0的时代将会到来!

 

 转载自:https://baijiahao.baidu.com/s?id=1742031397682985229&wfr=spider&for=pc

 

标签:TLS,协议,HTTP,TCP,QUIC,连接
From: https://www.cnblogs.com/sherlock-Ace/p/17514986.html

相关文章

  • Python错误:requests请求https网站报错SSLError
    问题描述:用requests包请求https的网站时,经常会遇到证书问题,也就是常见的SSLerror:requests.exceptions.SSLError:HTTPSConnectionPool(host='www.xxx.com',port=443):Maxretriesexceededwithurl:xxx.html(CausedbySSLError(SSLCertVerificationError(1,'[S......
  • C# HttpClient、API访问插件、接口访问
    关于使用插件访问接口.Net版本:NETFramework4.7.2 RestSharp版本:105.2.3.0Post访问 staticstringPostAction(){//公共apiconststringurl="https://api.uomg.com/api/rand.qinghua";//添加api访问......
  • Nginx http重定向https
    Nginx配置同一个域名http与https两种方式都可访问,证书是阿里云上免费申请的 server{listen80;listen443ssl;sslon;server_name域名;indexindex.htmlindex.htmindex.phpdefault.htmldefault.htmdefault.php;ssl_certificate/usr/local/nginx/cert/21402058063066221.......
  • Nginx 配置HTTP跳转到HTTPS
    https 访问我们的测试域名 https://www.xxx.com 站点,但是当我们直接在浏览器地址栏中直接输入 www.xxx.com 的时候却发现进入的是 http 协议的网站,这与我们的初衷不一致。 由于浏览器默认访问域名使用的是80端口,而当我们使用SSL证书后,网站的端口就变成了443,所以当我们直......
  • F5配置http请求自动跳转https到后端服务器
    F5配置http请求自动跳转https到后端服务器关联irules_sys_https_redirect实现跳转#HTTP_to_HTTPS_iRule自定义whenHTTP_REQUEST{HTTP::redirect"https://[HTTP::host][HTTP::uri]"}#FactoryF5httpsredirectiRule官方定义whenHTTP_REQUEST{HTTP::redirecthttps://[g......
  • Taurus .Net Core 微服务开源框架:Admin 插件【4-1】 - 配置管理-Kestrel【含https启用
    前言:继上篇:Taurus.NetCore微服务开源框架:Admin插件【3】-指标统计管理本篇继续介绍下一个内容:1、系统配置节点:App- Config 界面界面图如下:双击节点即可进入修改模式,如: 修改说明: 不勾选持久化,该配置当前生效,下次重次失效,修改后配置值旁边带有【temp】说明文......
  • Kong入门学习实践(6)HTTPS与TCP流代理
    最近在学习Kong网关,因此根据老习惯,我会将我的学习过程记录下来,一来体系化整理,二来作为笔记供将来翻看。由于我司会直接使用Kong企业版,学习过程中我会使用Kong开源版。本篇,我们学习快速配置HTTPS跳转与TCP流代理。HTTPS跳转配置HTTP协议虽然应用广泛,简单易用,但存在着巨大的安......
  • Servlet p3 HttpServletRequest对象
    HttpServletRequest对象基本介绍​ HttpServletRequest对象:HttpServletRequest对象专门用于封装HTTP请求消息,简称request对象。主要作用是用来接收客户端发送过来的请求信息,该对象是由Tomcat封装好传递过来。​ HttpServletRequest接口是ServletRequest的子接口。HTTP请......
  • nethttp和gin 路由
    net/http路由注册functest1(){http.HandleFunc("/",func(whttp.ResponseWriter,r*http.Request){fmt.Fprintf(w,"Helloworld!")})err:=http.ListenAndServe(":9001",nil)iferr!=nil{log.F......
  • HTTPS基础
    一、https基础:HTTP的缺点:通信使用明文,内容可能会被窃听不验证通信方的身份,有可能遭遇伪装无法证明报文的完整性,有可能信息已遭篡改HTTPS=HTTP+加密+认证+完整性保护HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,在HTTP的基础......