【调研】HTTP协议版本之间的区别和差异

HTTP协议简介

HTTP(超文本传输协议,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议,最初的目的是为了提供一种发布和接收STML页面的方法,即用于从WWW服务器传输超文本到本地浏览器的传输协议。所有的WWW都必须遵守这个标准。而且HTTP连接使用的是“请求-----响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务端才能回复数据。

另外, 超文本传输协议(HTTP,HyperText Transfer Protocol) 也是一种无状态的协议,它位于OSI七层模型的传输层。HTTP客户端会根据需要构建合适的HTTP请求方法而HTTP服务器会根据不同的HTTP请求方法做出不同的回应

【关于HTTP请求方法的介绍:((https://blog.csdn.net/weixin_43939593/article/details/103479464)】

  1. HTTP 0.9

HTTP 0.9是第一个版本的HTTP协议。 它的组成及其简单,只允许客户端发送GET这一种请求,且不支持请求头, 因为没有协议头,造成了HTTP 0.9协议只支持一种内容,即纯文本。不过网页仍支持用HTML语言格式化, 同时无法插入图片。

HTTP0.9 具有典型的无状态性,每个事物独立进行处理,事物结束之后就释放这个连接。由此可见, HTTP协议的网状态特点在其第一个版本0.9中已经成型。一次HTTP0.9的传输要建立一个由客户端到Web服务器的TCP连接,由客户端发起第一个请求,然后由Web服务器返回页面内容, 然后连接会关闭。 如果请求的页面存在,也不会返回任何错误码。

  1. HTTP 1.0

HTTP协议的第二个版本, 第一个在通讯中指定版本号HTTP协议版本,至今仍被广泛采用相对于HTTP0.9增加了如下的主要特性:

  • 请求与相应支持头域
  • 响应对象以一个响应状态行开始
  • 响应对象不只限于超文本
  • 开始支持客户端通过POST方法向Web服务器提交数据, 支持GET、HEAD、POST方法
  • 支持短连接。 每一个请求建立一个TCP连接,请求完毕之后立马断开连接。这里就会带来两个问题。
  1. 连接无法复用。 连接无法复用会导致每次请求都要经历三次握手和慢启动。三次握手在高延迟的场景下影响较明显,慢启动则对文件类请求影响较大
  2. head of line blocking 。 head of line blocking 会导致带宽无法被充分利用,以及后续健康请求被阻塞

也即是说HHTP1.0规定浏览器与服务器只保持短暂的连接,浏览器每次的请求都与服务器建立一个TCP连接,服务器完成请求处理后就立即断开TCP连接。多次请求就消耗较多时间

  1. HTTP 1.1

HTTP协议的第三个版本是HTTP1.1, 是目前使用最广泛的协议版本。 HTTP1.1是目前主流的HTTP协议版本, 所以我们就详细的来了解一下HTTP1.1的特性。

HTTP 1.1 引入了许多的关键性能优化:keepalive连接, chunked编码传输, 字节范围请求, 请求流水线等

  • Persistent Connection (keepalive连接): 允许HTTP设备在事物处理结束之后将TCP连接保持在打开的状态 以便未来的HTTP请求重现现在的连接, 知道客户端或服务器决定将其关闭为止。 在HTTP1.0中使用长连接需要添加请求头 Connection: Keep-Alive, 而在HTTP
    1.1所有的连接默认都是长连接,除非特殊声明不支持(HTTP请求报文首部加上Connection:close)。 服务器按照FIFO原则来处理不同的Request。

  • chunked编码传输
    该编码将实体分块传送并逐块注明长度,直到长度为0块表示传输结束,这在实体长度未知时特别有用(比如由数据库动态产生的数据)

  • 字节范围请求: HTTP1.1支持传送内容的一部分。比方说,当客户端已经有内容的一部分,为了字节省带宽, 可以只向服务器请求一部分。该功能通过消息中引入range头域来实现,它允许只请求资源的某个部分。在响应消息中Content-Range头域声明了返回的这部分对象的偏移值和长度。如果服务器相应地返回了对象所请求范围的内容,则响应码206(Partial Content)

  • Pipelining (请求流水线)

另外, HTTP 1.1还新增了如下的特性:

  • 请求消息和相应消息都支持的Host头域
    在HTTP1.0中认为每台服务器都绑定着一个唯一的IP地址,因此,请求消息中的URL可以没有传递主机名(hostname)。但随着虚拟主机技术的发展,在一台物理服务器上可以存在多个虚拟主机(Multi-hoed Web Servers), 并且它们共享一个ip地址。因此Host头的引入就很有必要了
  • 新增了一批请求方法 :OPTIONS, PUT, DELETE , TRACE , CONNECT方法
  • 缓存处理 : HTTP/1.1在1.0的基础上加入了一些cache的新特性, 引入了实体标签, 一般称为 e-tags , 新增更为强大的Cache-Control头
  1. HTTP 2.0

HTTP 2.0是下一代HTTP协议, 目前应用还非常少。 主要特点有:

  • 多路复用(二进制分帧)。HTTP 2.0最大的特点是:不会改动HTTP的语义,HTTP方法、状态码、URI及首部字段,等等这些核心概念上一如往常,却致力于突破上一代标准的性能限制,改进传输性能,实现低延迟和高吞吐量。而之所以叫2.0,是在于新增的二进制分帧层。在二进制分帧层上,HTTP2.0会将所有的信息分割成为更小的信息和帧,并对它们采用二进制格式的编码,其中HTTP1.0 ,HTTP1.1的首部信息都会被封装到Headers帧,而我们的request body则封装到Data帧里面。

  • HTTP 2.0通信都是在一个连接上完成的, 这个连接可以承载任意数量的双向数据流。相应地,每个数据流以消息的形式发送,而消息由一个或多个帧组成,这些帧可以乱序发送,然后再根据每个帧首部的流标识符重新组装。

  • 头部压缩:当一个客户端向相同服务器请求许多资源时,像来自同一个网页的图像,将会有大量的请求看上去几乎是同样的,这就需要压缩技术对付这种几乎相同的信息。

  • 随时复位:HTTP1.1的一个缺点是当HTTP信息有一定大小的数据传输时,你不能方便地随时停止它,中断TCP连接的代价是非常昂贵的。使用HTTP2.0的RST_STREAM将能方便地停止一个信息传输,启用新的信息,在不中断连接的情况下提高带宽利用效率。

  • 服务端推送流:Server Push. 客户端请求一个资源X,服务器端判断客户端还需要资源Z,在无需事先询问客户端的情况下将资源Z推送到客户端,客户端接收到之后,可以缓存起来以备以后使用。

  • 优先权和依赖:每一个流都有自己的优先级别,会标明哪个流是最重要的,客户端会指定哪个流是最重要的,有一些依赖参数,这样一个流就可以依赖另外一个流。优先级别可以在运行时动态改变,当用户滚动页面时,可以告诉浏览器哪个图像是最重要的,你也可以在一组流中进行优先筛选,能够抓住重点流。

发布了55 篇原创文章 · 获赞 12 · 访问量 5246

猜你喜欢

转载自blog.csdn.net/weixin_43939593/article/details/103480554