http1.1 http2.0 http3.0

开始先来一段FAQ

什么是http1

https://blog.wangriyu.wang/2018/03-http-message.html

什么是http2

https://blog.wangriyu.wang/2018/05-HTTP2.html

http1.1

URL or URN?

都是URI的子集。URL:告诉我们访问网络位置的方式;URN:包括名字(给定的命名空间内),但是不包括访问方式

URI包含很多,举例:

ftp://ftp.is.co.za/rfc/rfc1808.txt

http://www.ietf.org/rfc/rfc2396.txt

ldap://[2001:db8::7]/c=GB?objectClass?one

mailto:John.Doe@example.com

news:comp.infosystems.www.servers.unix

tel:+1-816-555-1212 telnet://192.0.2.16:80/

urn:oasis:names:specification:docbook:dtd:xml:4.1.2

什么是幂等性?

幂等性指的是作用于结果而非资源本身。

例如:

get请求就是幂等,只是查询,不对最终结果产生影响

post请求非幂等,每次都新增,对资源本身产生影响,从PATCH和DELETE更泛化来看:一次操作和多次操作是产生不同效果的,那就需要注意了非幂等

TCP连接数限制?

一个浏览器限制一般为6~8个,注意是端上的不知道W3C当时咋想的。

http管线化?

打包发送,FIFO会出现队头阻塞,只支持幂等操作管线化,同时需要客户端和服务端都支持。

耗时分布?

每次新建连接 DNS 解析需要时间(几 ms 到几百 ms 不等)、TCP 慢启动也需要时间、TLS 握手又要时间,而且后续请求都要等待队列调度。

 

http2.0

什么是HSTS?

幂等性指的是作用于结果而非资源本身。

什么是帧frame?

所有帧都是一个固定的 9 字节头部 (payload 之前) 跟一个指定长度的负载 (payload)。

什么是流stream?

流只是一个逻辑上的概念,代表 HTTP/2 连接中在客户端和服务器之间交换的独立双向帧序列,每个帧的 Stream Identifier 字段指明了它属于哪个流。

 

http3.0

什么是http3?

互联网工程任务组正式将基于 QUIC 协议的 HTTP (HTTP over QUIC)重命名为 HTTP/3

什么是QUIC协议?

QUIC(Quick UDP Internet Connections,快速 UDP 网络连接) 基于 UDP,正是看中了 UDP 的速度与效率。同时 QUIC 也整合了 TCP、TLS 和 HTTP/2 的优点,并加以优化。

什么是连接迁移?

QUIC 的连接不受四元组的影响,当这四个元素发生变化时,原连接依然维持。那这是怎么做到的呢?道理很简单,QUIC 连接不以四元组作为标识,而是使用一个 64 位的随机数,这个随机数被称为 Connection ID,即使 IP 或者端口发生变化,只要 Connection ID 没有变化,那么连接依然可以维持。

如何解决队头阻塞和多路复用?

HTTP/1.0时代:每次请求都要在收到上次请求的 ACK 消息后再请求,那么效率无疑很低。

HTTP/1.1时代:后来 HTTP/1.1 提出了 Pipelining 技术,允许一个 TCP 连接同时发送多个请求,这样就大大提升了传输效率。

在这个背景下,下面就来谈 HTTP/1.1 的队头阻塞。下图中,一个 TCP 连接同时传输 10 个请求,其中第 1、2、3 个请求已被客户端接收,但第 4 个请求丢失,那么后面第 5 - 10 个请求都被阻塞,需要等第 4 个请求处理完毕才能被处理,这样就浪费了带宽资源。

HTTP/2.0时代:HTTP/2 中每个请求都被拆分成多个 Frame 通过一条 TCP 连接同时被传输,这样即使一个请求被阻塞,也不会影响其他的请求。

在一条 TCP 连接上同时发送 4 个 Stream,其中 Stream1 已正确送达,Stream2 中的第 3 个 Frame 丢失,TCP 处理数据时有严格的前后顺序,先发送的 Frame 要先被处理,这样就会要求发送方重新发送第 3 个 Frame,Stream3 和 Stream4 虽然已到达但却不能被处理,那么这时整条连接都被阻塞。 

不仅如此,由于 HTTP/2 必须使用 HTTPS,而 HTTPS 使用的 TLS 协议也存在队头阻塞问题。TLS 基于 Record 组织数据,将一堆数据放在一起(即一个 Record)加密,加密完后又拆分成多个 TCP 包传输。一般每个 Record 16K,包含 12 个 TCP 包,这样如果 12 个 TCP 包中有任何一个包丢失,那么整个 Record 都无法解密。

HTTP/3.0时代:

  • QUIC 的传输单元是 Packet,加密单元也是 Packet,整个加密、传输、解密都基于 Packet,这样就能避免 TLS 的队头阻塞问题;

  • QUIC 基于 UDP,UDP 的数据包在接收端没有处理顺序,即使中间丢失一个包,也不会阻塞整条连接,其他的资源会被正常处理。

参考资料:

https://zh.wikipedia.org/wiki/HTTP/2

https://httpwg.org/specs/rfc7540.html

https://zh.wikipedia.org/wiki/HTTP%E4%B8%A5%E6%A0%BC%E4%BC%A0%E8%BE%93%E5%AE%89%E5%85%A8

https://dev.mobify.com/blog/domain-sharding-bad-news-mobile-performance/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值