HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
HTTP是基于 TCP/IP 协议的应用层协议。它不涉及数据包(packet)传输,主要规定了客户端和服务器之间的通信格式,默认使用80端口
简史
HTTP/0.9
- 1991年发布
- 仅支持GET获取HTML文档,响应请求之后立即关闭连接,不支持长连接
HTTP/1.0
-
1996年5月发布
-
传输数据不再只是文本,比如图片、视频、二进制文件...
-
增加POST、HEAD方法
-
增加包头信息(HTTP header)、状态码、缓存、权限等功能
-
同0.9版本,不支持长连接
HTTP/1.1
-
1997年1月发布,目前主流依然是1.1
-
增加PUT、PATCH、DELETE、OPTIONS方法
-
增加缓存管理和控制
-
强制要求客户端请求头信息增加Host字段,指定服务器的域名,这样服务器上支持了虚拟主机,即一台机器多个站点
-
支持持久连接,一个连接可以发送多个请求,也可以同时发送多个请求(服务器端顺序返回结果)
HTTP/2
-
2015年发布,目前还未正式大规模使用
-
二进制协议,不再是纯文本,在之前版本HTTP header必须是文本(ASCII编码)格式,body部分可以是文本也可以是二进制,但在HTTP/2,无论是header还是body都是二进制数据
-
支持在一个连接里,客户端和服务端同时发送多个请求,因为支持了在一个连接里同时发送多个请求和多个回应,为了区分它们就需要对数据做标记,每个请求或回应的所有数据包为一个数据流(stream),每个数据流都有一个唯一的ID,客户端发送的请求ID为奇数,服务端返回的为偶数
-
支持header压缩,并且支持header信息索引(客户端和服务端有一张相同的索引表,不同的header对应不同的索引号,发送请求时不会再发header,而是发索引号)
-
支持服务端主动推送功能,如果一个网页中含有大量的静态资源(js、css、图片等),HTTP/2版本可以在网页没有传输完之前就主动把该网页中包含的静态资源推送到客户端,省去了客户端再次发请求的过程
HTTP/3
2018年,进入标准化制订阶段