HTTP从入门到入土(2)——HTTP协议发展历史
http协议的发展历史
http/0.9
0.9版本是第一个定稿的http版本,相对较为简陋。它有以下特点:
- 只有一个命令get
- 没有header等描述数据的信息
- 服务器发送完毕,就关闭tcp连接
注意一点,0.9版本的http协议只要服务器发送完毕,就直接关闭tcp连接,也就是说,一次tcp连接只能发送一次http请求。
http/1.0
1.0版本在0.9版本上做出了很多创新和优化,该版本:
- 增加了新的命令(post命令和header命令)
- 增加status code(状态码)和header
- 增加多字符集支持、多部分发送、authorization(权限)、cache(缓存)等
在这个版本,基本实现了http协议的框架。
http/1.1
1.1版本解决了大量1.0版本的痛点,该版本新增了以下功能:
- 持久连接(keep alive)
- 管道化(pipeline)
- host和其他一些命令
在1.1版本以前,每次http请求,都会重新建立一次tcp连接,服务器响应后,就立刻关闭。众所周知,建立tcp连接的新建成本很高,因为需要三次握手,并且有着慢启动的特性导致发送速度较慢。而1.1版本添加的持久连接功能可以让一次tcp连接中发送多条http请求,值得一提的是默认是,控制持久连接的connection
字段默认值是keep-alive
,也就是说是默认打开持久连接,如果想要关闭,只需将该字段的值改为close
。
而管道化则赋予了客户端在一个tcp连接中连续发送多个请求的能力,而不需要等到前一个请求响应,这大大提高了效率。值得一提的是,虽然客户端可以连续发送多个请求,但是服务器返回依然是按照发送的顺序返回。
host
字段指定了服务器的域名,这允许一个物理服务器上可以建立多个虚拟服务器。
http/1.1是使用最广泛的http协议。
http2
- 所有数据都以二进制传输
- 同一个连接里面发送多个请求不再需要按照顺序来
- 头信息压缩以及推送等提高效率的功能
这里提下推送功能,众所周知,服务器推送一直是web开发的一大难点,原因就在于在http2之前的版本都不支持服务器推送。而http2允许服务器未经请求,主动向客户端发送资源。也就是说,当你向服务器请求html的时候,服务器可以直接将css和js一起推送给你,而不需要解析html再请求css和js,这大大提高了效率。
上一篇: python装饰器进阶
下一篇: python基础学习2