23.HTTP1.0、HTTP1.1、HTTP2.0的区别

1. HTTP1.0:

  • 使用keep-alive参数告知服务器端建立一个长连接。
  • 不支持host头域。HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此,在请求消息中的URL 并没有传递主机名(hostname)。
  • HTTP1.0使用header里的if-Modified-Since,Expires来作为缓存判断的标准。
  • 只允许请求全部资源,不允许请求部分资源,不支持断点续传功能。

2. HTTP1.1:

  • HTTP1.1默认支持长连接和请求的流水线(Pipelining)处理。
    在一个TCP连接上可以传送多个HTTP请求和响应,减少了建立和关闭连接的消耗和延迟。
  • HTTP1.1支持只发送header信息(不带任何body)信息,如果服务器认为客户端有权限请求服务器,则返回100(continue),否则返回401。
    如果客户端接受到100,就把请求body发送到服务器。
    如果客户端接受到401,客户端不用发送请求body,从而节约了带宽。
  • HTTP1.1引入了range头域,允许只请求资源的一部分,即返回码是206(Partial Content)。
    当客户端已经有一部分的资源后,只需要跟服务器请求另外的部分资源即可。支持断点续传。
  • HTTP1.1的请求消息和响应消息都支持host头域。
    随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机,它们可以共享同一个IP地址和端口。
  • HTTP1.1支持建立多个TCP连接,处理并发请求。
  • HTTP1.1不支持header数据的压缩。
  • HTTP1.1引入了更多的缓存控制策略。例如:Etag,if-Unmodified-Since,if-Match,If-None-Match等更多缓存头来控制缓存策略。
  • 新增24个错误状态码。如409(Conflict)表示请求的资源与资源的当前状态发生冲突;410(Gone)表示服务器上某个资源被永久性地删除。

3. HTTP 2.0

  • HTTP 2.0采用新的二进制格式。HTTP1.x的解析是基于文本的,健壮性不高。
    多路复用。同一个连接可以并发处理多个请求,而且并发请求的数量比HTTP1.1大了好几个数量级。
  • 数据压缩。HTTP2.0使用HPACK算法对header的数据进行压缩,数据体积小了,在网络上传输就会更快。
  • 服务器推送。当我们对支持HTTP2.0的服务器请求数据的时候,服务器会顺便把一些客户端需要的资源一起推送到客户端,免得客户端再次创建连接发送请求到服务器端获取。这种方式非常适合加载静态资源。
    服务器端推送这些资源其实存在于客户端的某处地方,客户端直接从本地加载这些资源就可以了,不用走网络,速度会很快。

补充:

  • HTTP是基于TCP/IP协议的,创建一个TCP连接是需要经过三次握手的,有一定的开销,如果每次通讯都要重新建立连接的话,对性能有影响。因此最好能维持一个长连接,可以用个长连接来发多个请求。
  • TCP连接有一个预热和保护的过程,先检查数据是否传送成功,一旦成功,则慢慢加大传输速度。因此对应瞬时并发的连接,服务器的响应就会变慢。所以最好能使用一个建立好的连接,并且这个连接可以支持瞬时并发的请求。

你可能感兴趣的:(23.HTTP1.0、HTTP1.1、HTTP2.0的区别)