HTTP/1.x 与 HTTP/2 – 解释两种协议之间的区别 - Mr.Ding

HTTP/1.x 与 HTTP/2 – 解释两种协议之间的区别

天天记事 609 / 2021-12-12 14:01:53

HTTP2 对比 HTTP1 或 HTTP1 对比 HTTP2——让我们了解这两种协议

HTTP/1.1 已经存在十多年了。随着 Google 的 SPDY 在 2015 年领先,IETF(互联网工程任务组)为我们提供了 HTTP/2,它引入了多项功能来减少页面加载时间。让我们比较一下 HTTP2 与。HTTP1.1 详细介绍。

HTTP/2 实现了更快的网页加载,而无需在开发方面需要大量人力的性能优化。它显着降低了 HTTP/1.1 的复杂性,并为我们提供了一个健壮的协议,尽管并非没有缺陷,但可能经得起时间的考验。在实现这一飞跃之前,让我们回顾一下互联网处于起步阶段时的步骤,以了解不同版本是如何演变成当前形式的。

HTTP 和互联网的开端

我们的故事始于 1969 年,当时有一个名为高级研究计划署网络 (ARPANET) 的计划。ARPANET 使用数据包交换并允许多台计算机在单个网络上相互通信。然而,这只是一个副产品。ARPANET 的初衷是设计一个分时系统,允许研究机构共享其计算机资源以有效利用处理能力。

在此之前,在 19 世纪的某个时候,我们今天所知道的互联网存在的种子已经随着电力和电报的发明而播下。随着莫尔斯在 1844 年发送第一条电报信息和第一条电缆横穿大西洋,电报网络基础设施的根基已经遍布各大洲和海洋。在未来几年,这将成为构建互联网的基础。1973 年,Kahn 和 Cerf 设计了 TCP/IP 协议套件,十年后被 ARPANET 采用,从那时起,我们见证了互联网络的发展。

HTTP 的演变

HTTP(超文本传输协议)是一组运行在 TCP/IP 协议套件之上的规则,它定义了如何在万维网上的客户端和服务器之间传输文件。

HTTP 的开始:版本 0.9 和 1.0

在最早的阶段(HTTP/0.9),HTTP 协议不使用头,只传输纯 HTML 文件。它是一种仅支持 GET 方法的单行协议。

随着客户端和服务器应用程序变得更加成熟,需要交换的不仅仅是普通的 HTML,HTTP/1.0(1991-1996 年间)引入了几个新特性。

HTTP/1.0 的主要特性:

  • 引入了请求(来自客户端机器)和响应(来自服务器)的标头概念。使用诸如 GET、POST、HEAD 之类的标头增加了扩展的灵活性,而这些在早期版本中是不可能的。
  • 现在包括版本信息。
  • 它允许对每个 TCP 连接进行单个请求/响应。
  • 状态代码用于指示成功的请求和指示传输错误。
  • 内容类型标头使得发送纯 HTML 以外的文件成为可能,包括脚本和媒体。

为增加安全性而创建:HTTPS

1994 年,Netscape Communications 为其 Web 浏览器 Netscape Navigator 创建了与 SSL 一起使用的 HTTPS(安全超文本传输协议)。随着正在设计的应用程序转向更加商业化的市场,广告商、未知个人和网络犯罪分子可以轻松访问个人数据,因此出现了对加密传输通道的需求。SSL 演变为 TLS,目前使用的是 TLS 1.2 和 1.3 版。

服务网民15年以上的协议:HTTP/1.1

HTTP/1.1 是 HTTP 的第一个标准化版本,于 1997 年推出。它提供了显着的性能优化(通过 HTTP/0.9 和 HTTP/1.0)并改变了客户端和服务器之间交换请求和响应的方式。

HTTP/1.1 的主要特性:

  • 不再需要在每个请求得到响应后立即终止每个连接;相反,使用 keep-alive 标头,可以有持久连接。它允许每个 TCP 连接有多个请求/响应。
  • Upgrade 标头用于指示来自客户端的偏好,如果服务器认为合适,则可以切换到更偏好的协议。
  • HTTP/1.1 支持块传输,允许将内容作为块动态流式传输,并在消息正文之后发送附加标头。在字段值在内容生成之前仍然未知的情况下,此增强功能特别有用。例如,当必须对内容进行数字签名时,不可能在整个内容生成之前这样做。
  • 引入了其他增强其稳定性的功能,例如:
    • 流水线(在对第一个请求的响应得到充分服务之前发送第二个请求)
    • 内容协商(客户端和服务器之间的交换以确定媒体类型,它还提供了在同一 URI 处为不同版本的资源提供服务的规定)
    • 缓存控制(用于在请求和响应中指定缓存策略)

旨在加速当今复杂网页的协议:HTTP/2

2010 年初,Google 推出了一个实验性协议 SPDY,该协议支持多路复用(通过单个 TCP 连接异步发送和接收多个请求/响应),但随着它获得牵引力,IETF 的 HTTP 工作组在 2015 年提出了 HTTP/2,它基于 SPDY 协议。

HTTP/2 的主要特性:

  • 它引入了服务器推送的概念,其中服务器预测客户端将需要的资源并在客户端发出请求之前推送它们。客户端保留拒绝服务器推送的权限;但是,在大多数情况下,此功能为流程增加了很多效率。

  • 介绍多路复用的概念,该概念在没有队头阻塞的情况下交错请求和响应,并通过单个 TCP 连接进行。

  • 它是一种二进制协议,即只有 0 和 1 形式的二进制命令才能通过线路传输。二进制帧层将消息划分为根据其类型(数据或报头)进行隔离的帧。此功能大大提高了安全性、压缩和多路复用方面的效率。

  • HTTP/2 使用 HPACK 标头压缩算法,该算法对 CRIME 等攻击具有弹性,并利用静态霍夫曼编码。

该系列的下一个版本 HTTP/3 基于谷歌的 QUIC,与其前身不同,它是向 UDP 的急剧转变。鉴于 HTTP/2 的逐渐采用率,HTTP/3 及其安全挑战(在我们从 TCP 切换到 UDP 的那一刻开始发挥作用)预计将面临一些困难。

HTTP/1.x 与 HTTP/2:比较研究

HTTP2 对比 HTTP1 根本不是辩论。HTTP2 比 HTTP1 更快、更可靠。HTTP1 为每个 TCP 连接加载单个请求,而 HTTP2 通过使用多路复用来避免网络延迟。

从某种意义上说,HTTP 是一种网络延迟敏感协议,如果网络延迟较少,则页面加载速度会更快。然而,网络带宽的显着增加只是略微改善了页面加载时间。这是理解不同 HTTP 版本之间性能效率差异的关键。回到人们使用拨号调制解调器网页的时代很简单,服务器和客户端之间的实际数据传输对页面加载时间的最大贡献。今天,由于带宽可用性的大幅增加,从服务器实际下载资源所占用的总页面加载时间可以忽略不计。这是建立 TCP 连接和发出影响性能的请求所花费的时间。最初建议每个主机名只使用两个连接,但今天大多数浏览器每个主机名使用六个连接。当我们在性能方面谈论 http 与 http2 时,重要的是要注意 HTTP/1.1 采用的许多性能优化在开发工作以及 HTTP/2 试图解决的网络拥塞方面引入了复杂性。

下表指出了 http2 与 http1 之间的区别因素:

Header CompressionHeaders 在每个请求上发送,导致大量重复数据未经压缩通过网络发送。HTTP/2 中默认包含使用 HPACK 的标头压缩。Performance OptimizationProvides 支持缓存以更快地交付页面。Spriting、连接、内联、域分片是一些用作“每个主机六个连接”规则的解决方法的优化。消除了对不必要优化黑客的需要。基于协议类型文本的协议是可读形式的。它是一个二进制协议(发送 HTTP 请求0 和 1 的形式)。需要从二进制转换回来才能读取它。SecuritySSL 不是必需的,但建议使用。HTTP1.1 中使用的摘要式身份验证是对 HTTP1.0 的改进。HTTPS 使用 SSL/TLS 进行安全加密通信。虽然安全性仍然不是强制性的,但它主要是加密的(尽管它没有强制执行),因为几乎所有客户端都需要对流量进行加密。它还具有一些最低标准,例如用于加密的最小密钥大小。TLS 1.2 等

微分器HTTP/1.0HTTP/1.1HTTP/2
1991年1997年2015年
主要特点对于每个 TCP 连接,只有一个请求和一个响应。
它支持连接重用,即对于每个 TCP 连接可能有多个请求和响应,以及客户端可以一次从服务器请求多个资源的管道。然而,流水线由于诸如队头阻塞等问题而难以实施,并且不是可行的解决方案。
使用多路复用,在单个 TCP 连接上,要传送的资源被交错并几乎同时到达客户端。它是使用可以确定优先级的流来完成的,可以具有依赖性和单独的流控制。它还提供了一个称为服务器推送的功能,允许服务器发送客户端需要但尚未请求的数据。
状态码可定义16个状态码;错误提示不够具体。引入警告标头字段以携带有关消息状态的附加信息。可定义24个状态码,报错更快更高效。HTTP 的底层语义(例如标头、状态代码)保持不变。
认证机制使用不安全的基本身份验证方案,因为用户名和密码以明文或 base64 编码传输。它相对安全,因为它使用摘要式身份验证、NTLM 身份验证。之前版本的安全问题将继续出现在 HTTP/2 中。但是,由于新的 TLS 功能(例如 Inadequate_Security 类型的连接错误),可以更好地处理它们。
缓存通过 If-Modified-Since 标头提供对缓存的支持。通过使用附加标头(如缓存控制)、条件标头(如 If-Match)和使用实体标签来扩展缓存支持。HTTP/2 在缓存方面没有太大变化。使用服务器推送功能,如果客户端发现资源已经存在于缓存中,它可以取消推送的流。
网络流量与 HTTP/1.0 相比,HTTP/1.1 提供了更快的网页交付并减少了网络流量。然而,TCP 启动缓慢,加上域分片(可以使用多个域同时下载资源)、连接重用和流水线,增加了网络拥塞的风险。HTTP/2 利用多路复用和服务器推送来有效减少页面加载时间,同时对网络延迟不那么敏感。


Header CompressionHeaders 在每个请求上发送,导致大量重复数据未经压缩通过网络发送。HTTP/2 中默认包含使用 HPACK 的标头压缩。Performance Optimization 提供对缓存的支持以更快地传送页面。Spriting、连接、内联、域分片是一些用作“每台主机六个连接”规则的解决方法的优化。消除了对不必要的优化黑客的需要。协议类型 基于文本的可读形式的协议。它是一个二进制协议(HTTP 请求以 0 和 1 的形式发送)。需要从二进制转换回来才能读取它。SecuritySSL 不是必需的,但建议使用。HTTP1.1 中使用的摘要式身份验证是对 HTTP1.0 的改进。HTTPS 使用 SSL/TLS 进行安全加密通信。虽然安全性仍然不是强制性的,但它主要是加密的(尽管它没有强制执行),因为几乎所有客户端都需要对流量进行加密。它还具有一些最低标准,例如用于加密的最小密钥大小。TLS 1.2 等

如何在您的网站上实施 HTTP/2

由于使用 HTTP/2 在正确实施时是一个不可见的过程,因此您的网站可能已经在使用它而您没有意识到。有一个简单的方法来检查这个:

  • 在 Web 浏览器(如 Firefox)上打开 Web 开发人员工具。
  • 在网络选项卡下,选择任何资源并检查标题选项卡下的版本号。

虽然 HTTP/2 不强制要求使用 SSL,但安装 SSL 证书至关重要,因为包括 Firefox 和 Chrome 在内的领先浏览器已决定仅通过 TLS (HTTPS) 实施 HTTP/2。为了启用 HTTP/2,必须获得 SSL/TLS 证书并使网站上的每个页面都为 https。

在 Web 服务器级别,它可以像软件更新一样简单,例如,Apache 在 2.4.17 版本中开始支持 HTTP/2。

采用 HTTP/2

HTTP/2 在客户端的渗透率超过 70%,因为大多数主要浏览器都支持 HTTP/2,而在服务器端,有谷歌、Facebook、Nginx 等主要科技巨头,他们有自己的服务器支持 HTTP/2。据 W3Techs 称,目前全球采用率约为 29%。


HTTP/1.0 IEFT地址(1996年,定稿):https://datatracker.ietf.org/doc/html/rfc1945

HTTP/1.1 IEFT地址(2014年,定稿):https://datatracker.ietf.org/doc/html/rfc7231

HTTP/2 IETF地址(2015年,定稿): https://datatracker.ietf.org/doc/html/rfc7540

HTTP/3 IEFT地址(2021年,草案):https://datatracker.ietf.org/doc/html/draft-ietf-quic-http-34

注:

IETF | Internet Engineering Task Force,互联网工程任务组,官网网址:https://www.ietf.org/


尊重他人研究成果,营造良性行业环境

译文源址:https://cheapsslsecurity.com/p/http2-vs-http1/