HTTP 0.9 HTTP 0.9是HTTP协议的第一个版本,已过时。它的组成非常简单,仅允许客户端发送GET请求,并且不支持请求标头。因为没有协议标头,所以HTTP 0.9协议仅支持一种类型的内容,即纯文本。但是,网页仍支持HTML语言格式,并且不能同时插入图片。 HTTP 0.9通常是无状态的,每个事务都是独立处理的,并且在事务结束时释放连接。可以看出,HTTP协议的第一个版本0.9已经形成了无状态特性。 HTTP 0.9传输必须首先建立从客户端到Web服务器的TCP连接,客户端发起一个请求,然后Web服务器返回页面内容,然后关闭该连接。如果请求的页面不存在,则不会返回任何错误代码。 HTTP 1.0 HTTP协议的第二个版本,即指定通信中版本号的HTTP协议的第一个版本,仍被广泛使用。与HTTP 0.9相比,添加了以下主要功能:请求和响应支持标头字段。响应对象以响应状态行开始。响应对象不限于超文本。它支持客户端通过POST方法将数据提交到Web服务器。它支持GET,HEAD和POST方法。 (短连接)为每个请求建立一个TCP连接,并在请求完成后立即断开连接。这将导致两个问题:连接无法重用,以及线头阻塞。无法重用连接将导致每个请求经历三向握手和缓慢启动。在高延迟情况下,三向握手的影响更为明显,而缓慢的启动对文件请求的影响更大。行头阻塞将导致带宽未被充分利用,并且随后的运行状况请求将被阻塞。 HTTP 1.1 HTTP 1.1引入了许多关键的性能优化:保持连接,分块编码传输,字节范围请求,请求管道等。持久连接(keepalive连接):允许HTTP设备在事务结束后保持TCP连接打开。重用当前连接以用于将来的HTTP请求,直到客户端或服务器决定关闭它为止。要在HTTP1.0中使用长连接,您需要添加请求标头Connection:Keep-Alive,默认情况下,HTTP 1.1中的所有连接都是长连接,除非特殊声明不支持它(HTTP请求消息标头添加了Connection) : 关闭)。服务器根据FIFO原则处理不同的请求。分块编码传输:此编码以块为单位传输实体,并逐块指示长度,直到长度为0块以指示传输结束。当实体的长度未知(例如由数据库动态生成的数据)时,这特别有用。字节范围请求:HTTP1。 1支持部分传输内容。例如,当客户端已经具有部分内容时,为了节省带宽,它只能从服务器请求部分内容。通过在请求消息中引入范围标头字段来实现此功能,该范围标头字段仅允许请求资源的特定部分。在响应消息中,Content-Range标头字段声明对象的返回部分的偏移值和长度。如果服务器相应地返回对象所请求的内容,则响应代码206(部分内容)流水线(请求管道)和其他功能请求消息和响应消息都支持Host标头字段:在HTTP1.0中,每个服务器都被认为是bound指定唯一的IP地址。因此,请求消息中的URL不传达主机名。但是随着虚拟主机技术的发展,物理服务器上可以有多个虚拟主机(多宿主Web服务器),并且它们共享一个IP地址。因此,必须引入Host标头。添加了一批Request方法:HTTP1.1添加了OPTIONS,PUT,DELETE,TRACE,CONNECT方法。缓存处理:HTTP / 1.1在1.0的基础上添加了缓存的一些新功能,引入了实体标签(通常称为电子标签),其中添加了更强大的Cache-Control标头。 HTTP 2.0 HTTP 2.0是下一代HTTP协议,目前应用很少。主要功能包括:复用(二进制成帧)HTTP 2.0的最大功能:不会更改HTTP的语义,HTTP方法,状态代码,URI和标头字段等。这些核心概念与往常相同,但是可以致力于突破上一代标准的性能限制,提高传输性能