前言:http当前有哪些版本
HTTP
(Hypertext Transfer Protocol,超文本传输协议)是一种用于传输超媒体文档的应用层协议,当前主要使用的版本有 HTTP 1.0
、HTTP 1.1
和 HTTP 2
。
一、HTTP 1.0
这是最早的版本,采用的是短连接,它有很多的缺点。
- 每次请求都要与服务器建立一次TCP连接,请求结束后立即断开连接。
- 不支持请求流水线,每次只能发送一个请求。
- 数据传输没有压缩,可能会造成网络拥堵。
- 报文头部信息过大,
HTTP 1.0
的头部格式为ASCII
码文本格式,每次请求时都需要传输相应的头部信息。哪怕存在重复的头部信息,这些信息也会被重复传输,浪费了带宽和时间。
总结:无法高效的处理长链接,流水线化请求;请求头信息过大,容易导致网络延迟,浪费资源。
二、HTTP 1.1
这个版本针对 1.0 版本的缺点做了一些优化,主要有以下几个方面。
- 支持持久连接,即在客户端和服务器之间的
TCP
连接上可以发送多个请求和响应,不用每次请求都重新建立连接。- 支持流水线化,在一个
TCP
连接上可以同时发送多个请求,不需要等待响应返回。这样可以减少延迟,提高网络吞吐量。- 引入了新的缓存处理机制,可以减少服务器的压力,并提高数据的传输速率。使用
Cache-Control
和ETag
等头部来控制缓存机制,并对缓存进行更精细的控制。- 引入了更严格的身份验证和密码保护方案,可以对资源进行更好的保护,防止资源被非法访问。
- 支持多种编码格式,并允许服务器压缩数据并在客户端解压缩,从而减少数据传输的数量和时间。
1.1
版本针对 1.0
版本做了一些优化,但仍然存在很多的问题。主要有以下几点。
HTTP 1.1
采用的是队列式的方式进行请求响应,同一时间内只能处理一个请求,不能并发请求,这可能会导致堵塞,从而导致剩余请求无法被传送,影响速度和性能。- 没有减少头部信息大小,依然存在 1.0 版本的问题。
- 依赖于 TCP 连接,可能会有拥塞控制、包延迟等拥塞控制、包延迟等问题。
HTTP 1.1
下的cookies
、SSL
等安全机制并不完美,会面临信息泄露、身份伪造和跨站点脚本等问题,从而威胁到网络安全。
三、HTTP 2
这个版本是 2015 年发布的,也是现在应用最广泛的版本。它相对于 1.1 版本,进一步进行了优化。
- 多路复用:
HTTP 2.0
可以同时传输多个请求和响应,而不需要像HTTP 1.x
版本那样需要建立多条 TCP 连接。- 二进制分帧:将消息分为更小的帧,每个帧都包含帧头信息,这些帧进行无序传输而且并行处理,帧之间互不影响,同时用二进制编码降低了出错率。
- 首部压缩:在
HTTP 2.0
中,客户端和服务器可以维护一个静态表和动态表,用来存储之前发送的 HTTP 首部。这些首部可以被压缩,从而在网络上传输更快。- 服务器推送:
HTTP 2.0
允许服务器提前向客户端推送数据,客户端在没有明确请求时就会收到来自服务器的资源,加快了网页的加载速度。
HTTP 2 已经足够优秀,但依然存在一些不足,不过这些不足只能说是以后的升级优化方向,并不是致命缺点。
- 需要新的服务器和客户端支持:对于老版本的浏览器和服务器,需要额外的配置和插件才能兼容。
- 使用开销较大:由于首部压缩使用的算法复杂,需要更高的计算机资源。
- 不支持无状态连接:
HTTP 2.0
通过多路复用来提升性能,但这也带来了一个问题,即相比HTTP 1.x
,HTTP 2.0
的连接更为耗费资源,无法像HTTP 1.x
一样保持为无状态连接。- Head-of-line blocking:在
HTTP 2.0
中,多个请求共享一条TCP连接,但在HTTP 2.0
中,响应需要按照请求的顺序返回,对于某个没有返回的请求,会阻塞当前连接的其他请求,这种现象称作Head-of-line blocking
。
END