内容来源 | MindMaster 竖屏思维导图精品课 绘制 | 短暂
http协议在1991年发布第一个版本版本号为0.9。随后WWW联盟 (WWW Consortium-W3C)于1994年成立,http协议被纳入到 W3C组织中进行维护和管理。
HTTP1.0
最早在1996年在网页中使用,内容简单,所以浏览器的每次请求都 需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连 接(无连接),服务器不跟踪每个客户端也不记录过去的请求(无 状态),请求只能由客户端发起(单向性)。
HTTP1.1
到1999年广泛在各大浏览器网络请求中使用,HTTP/1.0中默认使用 Connection: close。在HTTP/1.1中已经默认使用Connection: keep-alive(长连接),避免了连接建立和释放的开销,但服务器 必须按照客户端请求的先后顺序依次回送相应的结果,以保证客户 端能够区分出每次请求的响应内容。通过Content-Length字段来判 断当前请求的数据是否已经全部接收。不允许同时存在两个并行的 响应。1.1中最重要的一个特点是支持“长连接”,即“一次连接可以多 次请求”。
HTTP2.0
长连接
在HTTP/2中,客户端向某个域名的服务器请求页面的过程中, 只会创建一条TCP连接,即使这页面可能包含上百个资源。 单一 的连接应该是HTTP2的主要优势,单一的连接能减少TCP握手带 来的时延 。HTTP2中用一条单一的长连接,避免了创建多个TCP 连接带来的网络开销,提高了吞吐量。
多路复用 (Multiplexing)
HTTP2.0中所有加强性能的核心是二进制传输,在HTTP1.x中, 我们是通过文本的方式传输数据。在HTTP2.0中引入了新的编码 机制,所有传输的数据都会被分割,并采用二进制格式编码。
多路复用,连接共享。不同的request可以使用同一个连接传输 (最后根据每个request上的id号组合成正常的请求)。 HTTP2.0中,有两个概念非常重要:帧(frame)和流 (stream)。
帧是最小的数据单位,每个帧会标识出该帧属于哪个流,流是多 个帧组成的数据流。
所谓多路复用,即在一个TCP连接中存在多个流,即可以同时发 送多个请求,对端可以通过帧中的表示知道该帧属于哪个请求。 在客户端,这些帧乱序发送,到对端后再根据每个帧首部的流标 识符重新组装。通过该技术,可以避免HTTP旧版本的队头阻塞 问题,极大提高传输性能。
首部压缩(Header Compression)
由于1.1中header带有大量的信息,并且得重复传输,2.0使 用encoder来减少需要传输的hearder大小。
服务端推送(Server Push)
在HTTP2.0中,服务端可以在客户端某个请求后,主动推送 其他资源。
可以想象一下,某些资源客户端是一定会请求的,这时就可 以采取服务端push的技术,提前给客户端推送必要的资源, 就可以相对减少一点延迟时间。在浏览器兼容的情况下也可 以使用prefetch。
更安全
HTTP2.0使用了tls的拓展ALPN做为协议升级,除此之外, HTTP2.0对tls的安全性做了近一步加强,通过黑名单机制禁 用了几百种不再安全的加密算法。
实时效果反馈
1.如下那个不是HTTP2.0协议的新特性。
A 短连接。B 多路复用。 C 首部压缩。 D 服务推送。