http协议的演变
什么是http协议?
HTTP 协议全称为 Hypertext Transfer Protocol,即超文本传输协议,是互联网上应用最为广泛的一种网络传输协议
http协议演变
1991年0.9版本-------1996年1.0版本-------1997年1.1版本--------2015年2版本-------2022年3版本
http/0.9特点
1、只支持GET请求
2、响应为HTML格式的文本
3、没有请求头响应头
http/1.0特点
1、HTTP/1.0支持多种HTTP方法,包括GET、POST、HEAD、PUT、DELETE等
2、增加了请求头和响应头
javascript
// 请求头
accept:text/html // 请求的文件类型
accept-encodeing: gzip,deflate // 服务器采用的压缩方式
accept-charset: utf-8 // 文件的编码格式
accept-language:zh-CN,zh // 页面显示的语言
javascript
// 响应头
content-encoding :gzip // 服务器响应数据的压缩格式
content-type:text/html;charset=UTF-8 // 服务器响应的 数据类型 和 编码格式
3、引入了状态码
4、提供了 Cache 机制,用来缓存已经下载过的数据
5、服务器需要统计客户端的基础信息,比如windows1和macOS的用户数量分别是多少,所以HTTP/1.0的请求头还加入了用户代理字段。
http/1.0待改进的部分
1、每个请求都需要建立一个新的TCP连接,TCP是个重协议,这会导致很多的网络开销
2、HTTP/1.0没有处理并发请求的机制,这会导致浏览器需要等待前一个请求完成后才能发送下一个请求
http/1.1特点
1、在header中引入Connection: keep-alive,支持持久连接
2、支持管道化技术,它可以让浏览器同时发送多个请求,不用等待服务器返回。提高了并发性能。
3、头部信息是文本,数据部分可以是文本也可以是二进制
http/1.1待改进的部分
**1、**那就是队头堵塞,HTTP/1.1 所有的数据通信都是按次序完成的,服务器只有处理完一个请求,才会处理下一个请求,如果前面的请求处理特别慢,后面就会有很多请求排队等着,严重影响整个页面加载
http/2特点
1、HTTP/2版本的头部和数据部分都是二进制
2、减少头部信息数据大小,通过HPACK算法将头信息压缩后再发送
3、减少信息发送次数,客户端和服务端同时维护一张头信息表,所有字段都会存入这个表,以后请求只要发送不同字段即可,这样就提高速度了
4、支持多路复用,通过单一连接可以发送多个的请求-响应消息,不用按照顺序一一对应,这就避免了队头堵塞问题,每个请求或回应的所有数据包,称为一个数据流(stream),每个数据流都有一个独一无二的编号来区分。数据流的最小单位是帧,帧会组成消息数据包,多个消息数据包组成流,一个tcp连接里,可并发许多流。
5、http2支持服务端推送,即允许服务端未经请求,主动向客户端发送资源
http/2待改进的部分
1、 解决了应用层面的队头阻塞问题,但是并没有解决TCP的队头阻塞
什么是TCP的队头阻塞?
采用HTTP/2时,浏览器一般会在单个TCP连接中创建并行的几十个乃至上百个传输。
如果HTTP/2连接双方的网络中有一个数据包丢失,或者任何一方的网络出现中断,整个TCP连接就会暂停,丢失的数据包需要被重新传输。因为TCP是一个按序传输的链条,因此如果其中一个点丢失了,链路上之后的内容就都需要等待。