网络:HTTP发展过程

HTTP超文本传输协议,是浏览器和服务器之间的通信协议。

1991 年 HTTP 正式诞生,到如今已经经过了几个版本的迭代,本片文章主要讲讲各个版本的特点。

img

一、HTTP/0.9

http0.9最为最开始诞生的,只是一个简单的协议,只有一个GET方法,没有首部,目标只是为了用来获取HTML。

二、HTTP/1.0

随着HTTP的发展,只能传输文本内容已经满足不了需求,所以新增了:

  1. 增加了请求头和响应头

  2. 任何格式的内容都可以发送

    Content-Type:服务器回应的时候告诉客户端数据类型是什么

    Accept:请求时用于指定客户端接受哪些类型的信息

    Content-Encoding:字段说明数据的压缩方法

    Accept-Encoding:客户端在请求的时候说明自己可以接受那些压缩方法

  3. 引入了POST与HEAD命令

  4. 可以缓存,使用Expires头部字段实现

三、HTTP/1.1

HTTP/1.1是现在应用最为广泛的一个协议

HTTP/1.0每次请求资源都需要新的一个HTTP请求,每次都会三次握手创建连接和四次挥手关闭连接增加了网络开销(队头阻塞),并且还是一发一收,增加了时间的消耗

所以新增了:

  1. 持久连接

    TCP连接默认不关闭,可以被多个请求复用,户端和服务器发现对方一段时间没有活动,就可以主动关闭连接。

  2. 管道机制

    在同一个TCP连接里面,客户端可以同时发送多个请求,不用等上一个请求返回,但是服务器还是按照顺序,先回应A请求,完成后再回应B请求

  3. 允许范围请求,即在请求头中加入Range头部

  4. 引入了更多的缓存控制策略,如Entity tag,If-Unmodified-Since, If-Match, If-None-Match等

  5. 新增PUT,OPTIONS,DELETE等请求方法

四、HTTP/2.0

新增了:

  1. 复用TCP连接

    在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,而且不用按照顺序一一对应,这样就避免了”队头堵塞”。

    img

  2. 头信息压缩机制

    因为HTTP协议不带状态,所以请求的很多字段都是重复的,比如cookie,User Agent,每次请求都必须附带,会很浪费宽带也影响速度,对此作出了优化。
    ① 头信息使用gzipcompress压缩后再发送

    ② 客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。

  3. 服务器推送

    允许服务器未经请求,主动向客户端发送资源

  4. 新的二进制格式

    HTTP1.x的解析是基于文本。基于文本协议的格式解析存在天然缺陷,文本的表现形式有多样性,要做到健壮性考虑的场景必然很多,二进制则不同,只认0和1的组合。基于这种考虑HTTP2.0的协议解析决定采用二进制格式,实现方便且健壮。

五、HTTP/3.0

2018 年HTTP/3 将底层依赖的TCP 改成 UDP,UDP 相对于 TCP 而言最大的特点是传输数据时不需要建立连接,可以同时发送多个数据包,所以传输效率很高,缺点就是没有确认机制来保证对方一定能收到数据。

参考文章:

HTTP0.9/1.0/1.1/2

前端基础篇之HTTP协议