HTTP 0.9
组成简单,只允许发送GET请求,且不支持请求头,具有典型的无状态性,不会返回错误状态码。
HTTP 1.0
在通讯中指定版本号,相对于0.9版本增加了如下特性:请求和响应支持头域、响应对象以一个响应状态行开始、响应对象不局限于超文本、支持客户端用POST方法向服务器提交数据(POST GET HEAD方法)、支持长连接(默认短连接)、缓存机制、以及身份认证。
HTTP 1.1
keepalive连接(HTTP 1.1默认长连接)、chunked编码传输(将实体分块传输并标明长度)、字节范围请求(允许只请求资源的某部分,如果服务器返回相应的内容,则状态码是206)、Pipelining(请求流水线)、请求消息相应消息都支持Host头域、新增了请求方法(OPTIONS PUT DELETE TRACE CONNECT方法)、缓存处理(cache的新特性)
HTTP 2.0
主要特点:
多路复用(二进制分帧)
HTTP 2.0 通信都在一个连接上完成,这个连接可以承载任意数量的双向数据流。相应地,每个数据流以消息的形式发送,而消息由一或多个帧组成,这些帧可以乱序发送,然后再根据每个帧首部的流标识符重新组装。
头部压缩
当一个客户端向相同服务器请求许多资源时,像来自同一个网页的图像,将会有大量的请求看上去几乎同样的,这就需要压缩技术对付这种几乎相同的信息。
随时复位
HTTP1.1一个缺点是当HTTP信息有一定长度大小数据传输时,你不能方便地随时停止它,中断TCP连接的代价是昂贵的。使用HTTP2的RST_STREAM将能方便停止一个信息传输,启动新的信息,在不中断连接的情况下提高带宽利用效率。
服务端推流:Server Push
客户端请求一个资源X,服务器端判断也许客户端还需要资源Z,在无需事先询问客户端情况下将资源Z推送到客户端,客户端接受到后,可以缓存起来以备后用。
优先权和依赖
每个流都有自己的优先级别,会表明哪个流是最重要的,客户端会指定哪个流是最重要的,有一些依赖参数,这样一个流可以依赖另外一个流。优先级别可以在运行时动态改变,当用户滚动页面时,可以告诉浏览器哪个图像是最重要的,你也可以在一组流中进行优先筛选,能够抓住重点流。