一、http协议介绍
http(Hypertext transfer protocol)超文本传输协议,它是互联网上应用最为广泛的一种网络协议,工作在应用层。
二、http协议发展
http协议目前有4个版本,其中1.0、1.1版本在互联网上被广泛使用,2.0版本目前应用很少,是下一代的http协议。
- http/0.9版本:1991年,原型版本,功能简陋,只有一个命令GET,只支持纯文本内容,该版本已过时。
- http/1.0版本: 1996年5月,支持cache, MIME, method等。
- http/1.1版本: 1997年1月,默认建立持久连接,并能很好地配合代理服务器工作。还支持以管道方式在同时发送多个请求,以便降低线路负载,提高传输速度。
- http/2 版本: 2015年5月作为互联网标准正式发布,头部信息和数据体都是二进制,引入头信息压缩机制等。
三、1.x版本说明
http1.0版本:
- 任何格式的内容都可以发送,这使得互联网不仅可以传输文字,还能传输图像、视频、二进制等文件。
- 除了GET命令,还引入了POST命令和HEAD命令。
- http请求和回应的格式改变,除了数据部分,每次通信都必须包括头信息(HTTP header),用来描述一些元数据。
http1.1版本:
- http1.1是目前最为主流的http协议版本,从1997年发布至今,仍是主流的http协议版本。
- 引入了持久连接( persistent connection),即TCP连接默认不关闭,可以被多个请求复用,不用声明Connection: keep-alive。
- 引入了管道机制( pipelining),即在同一个TCP连接里,客户端可以同时发送多个
请求,进一步改进了HTTP协议的效率。 - 新增方法:PUT、 PATCH、 OPTIONS、 DELETE。
- http协议不带有状态,每次请求都必须附上所有信息。请求的很多字段都是重复的,浪费带宽,影响速度。
http1.x版本问题:
- http1.x在传输数据时,所有传输的内容都是明文,客户端和服务器端都无法验证对方的身份,无法保证数据的安全性。
- 1.1版本允许复用TCP连接,但是同一个TCP连接里面,所有的数据通信是按次序进行的。服务器只有处理完一个回应,才会进行下一个回应,可能会造成Head-of-line blocking的问题。
- http1.x支持了keep-alive,来弥补多次创建连接产生的延迟,但是keepalive使用多了同样会给服务端带来大量的性能压力,并且对于单个文件被不断请求的服务(例如图片存放网站), keep-alive可能会极大的影响性能,因为它在文件被请求之后还保持了不必要的连接很长时间。
四、http/2协议
http/2发布于2015年,目前应用还比较少,该版本主要有如下特点:
- http/2是一个彻底的二进制协议,头信息和数据体都是二进制,并且统称为"帧"(frame):头信息帧和数据帧。
- 复用TCP连接,在一个连接里,客户端和浏览器都可以同时发送多个请求或回应,且不用按顺序一一对应,避免了队头堵塞的问题,此双向的实时通信称为多工( Multiplexing)。
- HTTP/2 允许服务器未经请求,主动向客户端发送资源,即服务器推送。
- 引入头信息压缩机制( header compression) ,头信息使用gzip或compress压缩后再发送。
五、查看网站http协议版本
打开浏览器,以百度首页为例,按下F12键。点击network项,然后刷新网页。
从响应头部信息可以看出,该网站使用的是http1.1版本。