最初的http版本0.9 功能简陋,只能支持get方式并且仅能请求访问HTML格式的资源
http1.0 增加了post请求方式和head,不仅限于html格式,根据 content-type 可以支持多种数据格式,同时开始只支持cache。新增的功能还包括:状态码,缓存,内容编码等等但是1.0的版本工作方式是每次tcp连接只能发卡一个请求,当服务器响应后就回关闭这次连接下一个请求需要重新建立tcp连接不支持keep-live
缺点:tcp的连接成本很高,因为客户端和服务器要进行三次握手,并且开始是的发送速率不高,所以1.0的版本性能较差
解决方案:增加了concection:keep-live字段。
http1.1版本 引入了持久连接 一个tcp连接可以允许多个http请求
加入了管道机制,在一个tcp连接里面,允许多个请求同时发送,增加了并发性,进一步改善了http协议的效率。
新增了请求方式put patch options delete。
客服端新增了host字段,用来指定服务器的域名,加入新的状态码节约带宽
缺点:1.1版本虽然允许复用tcp连接,但是同一个tcp连接里面,所有的数据通信是按次序进行的,服务端是安队列顺序处理请求的,这样派对处理http请求,就会造成队头堵塞的问题。同时http是无状态连接的。因此每次请求需要添加重复的字段,降低带宽的利用率。
http2.0解决了1.1中的了利用率不高的问题。增加了双工模式:不仅客户顿能够同时发送多个请求,服务端也能同时处理多个请求,增加服务器推送功能。支持二进制帧的格式来传递报头和数据,
HTTP 性能优化的关键并不在于高带宽,而是低延迟。TCP 连接会随着时间进行自我「调谐」,起初会限制连接的最大速度,如果数据成功传输,会随着时间的推移提高传输的速度。这种调谐则被称为 TCP 慢启动(拥塞控制)。由于这种原因,让原本就具有突发性和短时性的 HTTP 连接变的十分低效。 HTTP/2 通过让所有数据流共用同一个连接,可以更有效地使用 TCP 连接,让高带宽也能真正的服务于 HTTP 的性能提升。
http响应模型
单进程io模型 多进程io模型 复用io模型 复用io模型 复用多线程io模型
总结:
http1.0(或者0.9)版本是相对较落后的版本,在功能上支持如下:
TCP连接不可复用,且一个TCP连接只能发送一次请求,当服务器响应后,就会关闭这次连接。这样导致每次请求都需要重新建立TCP连接(三次握手),影响发送速率,后面提供了一个非标准字段Connection字段来实现长连接,但是由于非标准字段,所以不同实现的行为可能不一致; 支持发送的http请求方式有get(0.9)、post、head(1.0);
http1.1 实现长连接,即TCP连接默认不关闭,允许被多个请求复用,不用申明Connection: keep-alive。 提供管道机制,即一个TCP连接中,允许多个请求同时发送,增加并发性,但是服务器还是根据得到请求的先后顺序去进行响应,这种机制容易造成队头阻塞。 请求方式增加put、patch、options、delete等。 请求头新增host字段,用来处理服务器存在多个虚拟主机的情况。 提供身份认真机制,许多web站点要求用户提供一个用户名—口令对才能访问存放在其服务器中的文档,这种要求称为身份认证(authentication)。HTTP提供特殊的状态码和头部来帮助Web站点执行身份认证。
http2.0
增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题; 服务器推送功能,当我们对支持HTTP2.0的web server请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常合适加载静态资源 支持二进制帧的格式来传递报头和数据。 头信息压缩机制,头信息使用gzip或compress压缩后再发送;另一方面,客户端和服务器同时维护一张头信息表,所有字段都会存入这个表,生成一个索引号,以后就不发送同样字段了,只发送索引号,这样就提高速度了。