网络:HTTP发展过程
HTTP超文本传输协议,是浏览器和服务器之间的通信协议。
1991 年 HTTP 正式诞生,到如今已经经过了几个版本的迭代,本片文章主要讲讲各个版本的特点。
一、HTTP/0.9
http0.9
最为最开始诞生的,只是一个简单的协议,只有一个GET方法,没有首部,目标只是为了用来获取HTML。
二、HTTP/1.0
随着HTTP的发展,只能传输文本内容已经满足不了需求,所以新增了:
增加了请求头和响应头
任何格式的内容都可以发送
Content-Type:服务器回应的时候告诉客户端数据类型是什么
Accept:请求时用于指定客户端接受哪些类型的信息
Content-Encoding:字段说明数据的压缩方法
Accept-Encoding:客户端在请求的时候说明自己可以接受那些压缩方法
引入了POST与HEAD命令
可以缓存,使用
Expires
头部字段实现
三、HTTP/1.1
HTTP/1.1
是现在应用最为广泛的一个协议
HTTP/1.0
每次请求资源都需要新的一个HTTP请求,每次都会三次握手创建连接和四次挥手关闭连接增加了网络开销(队头阻塞
),并且还是一发一收,增加了时间的消耗
所以新增了:
持久连接
TCP连接默认不关闭,可以被多个请求复用,户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。
管道机制
在同一个TCP连接里面,客户端可以同时发送多个请求,不用等上一个请求返回,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求
允许范围请求,即在请求头中加入
Range
头部引入了更多的缓存控制策略,如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等
新增PUT,OPTIONS,DELETE等请求方法
四、HTTP/2.0
新增了:
复用TCP连接
在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。
头信息压缩机制
因为HTTP协议不带状态,所以请求的很多字段都是重复的,比如cookie,User Agent,每次请求都必须附带,会很浪费宽带也影响速度,对此作出了优化。
① 头信息使用gzip
或compress
压缩后再发送② 客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。
服务器推送
允许服务器未经请求,主动向客户端发送资源
新的二进制格式
HTTP1.x
的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0
的协议解析决定采用二进制格式,实现方便且健壮。
五、HTTP/3.0
2018 年HTTP/3
将底层依赖的TCP
改成 UDP
,UDP
相对于 TCP
而言最大的特点是传输数据时不需要建立连接,可以同时发送多个数据包,所以传输效率很高,缺点就是没有确认机制来保证对方一定能收到数据。
参考文章: