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