HTTP/2 终极指南(译文)

译文来源

What is HTTP/2 – The Ultimate Guide

HTTP/2是什么?

HTTP最初是由万维网的先驱Tim Berners-Lee提出的,他设计的应用程序协议简单易用,可以在Web服务器和客户端之间执行高级数据通信功能。

HTTP的第一个文档版本于1991年发布,名为HTTP0.9,随后在1996年正式引入并认可了HTTP1.0。HTTP1.1随后在1997年推出,此后几乎没有得到迭代式的改进。

2015年2月,Internet Engineering Task Force (IETF) HTTP工作组修订了HTTP,并以HTTP/2的形式开发了应用协议的第二个主要版本。2015年5月,HTTP/2实现规范正式标准化,以响应谷歌的HTTP兼容SPDY协议。HTTP/2 vs . SPDY对比说明穿整个指南。

什么是协议?

HTTP / 2与HTTP1辩论必须在该资源中经常使用的术语协议上进行简短的入门。 协议是一组规则,用于管理客户端(例如,互联网用户用于请求信息的Web浏览器)和服务器(包含所请求信息的机器)之间的数据通信机制。

协议通常由三个主要部分组成:标题,有效负载和页脚。 置于有效载荷之前的标题包含源和目标地址等信息以及有关载荷的其他详细信息(如大小和类型)。 有效载荷是使用协议传输的实际信息。 Footer跟随Payload并作为控制字段用于将客户端 - 服务器请求与Header一起路由到目标收件人,以确保Payload数据的传输没有错误。

该系统类似于后邮件服务。 将信件(有效载荷)插入信封(标题),其上写有目的地地址,并在发送之前用胶水和邮票(页脚)密封。 这不是传输0,1字符那么简单,这需要新的创新来适应互联网爆炸式增长的使用负荷。

HTTP协议最初由基本命令组成:GET,用于从服务器获取信息,POST用于将所请求的信息传递给客户端。 这个简单且显而易见的无聊命令集GET数据和POST响应基本上构成了构建其他网络协议的基础。 用HTTP/2来增强在线状态会增强用户体验,提高效率。

创建HTTP / 2的目标

自上世纪90年代初创建以来,HTTP只经历了几次重大的改革。最新版本HTTP1.1已经为网络世界服务了超过15年。在当前动态信息更新、大容量多媒体对Web性能要求很高,旧的协议过时了。这些趋势要求对HTTP/2进行重大更改,以改进internet体验。

为新版本的HTTP进行研究和开发的主要目标围绕着三个基本特性——简单性、高性能和健壮性,这三个特性很少与单个网络协议关联,而不需要额外的网络技术。这些目标是通过引入一些功能来实现的,这些功能使用多路复用、压缩、请求优先级和服务器推送等技术来降低处理浏览器请求的延迟。

流控制,升级和错误处理等机制可作为HTTP协议的增强,以便开发人员确保基于Web的应用程序的高性能和弹性。

集体系统允许服务器有效地响应比客户端最初请求的更多的内容,消除了用户不断请求信息的干预,直到网站完全加载到web浏览器上。例如,HTTP/2的服务器推送功能允许服务器响应页面的全部内容,而不是浏览器缓存中已经可用的信息。有效压缩HTTP头文件可以将协议开销降到最低,从而提高每个浏览器请求和服务器响应的性能。

HTTP/2的更改旨在维护与HTTP1.1的互操作性和兼容性。基于真实世界的实验,HTTP/2的优势预计会随着时间的推移而增加,它在与HTTP1.1进行长期比较时处理性能相关问题的能力将极大地影响其发展。

我们不会替换所有的HTTP—您今天使用的方法、状态代码和大多数头文件都是相同的。相反,我们正在重新定义它是如何“在网上”使用的,因此它更有效率,对互联网本身也更温和--Mark

需要注意的是,新的HTTP版本是对其前身的扩展,预计不会很快取代HTTP1.1。HTTP/2实现不会自动支持HTTP1.1中所有可用的加密类型,但肯定会在不久的将来为更好的替代方案或额外的加密兼容性更新打开大门。然而,特性比较(如HTTP/2 vs HTTP1)和SPDY vs HTTP/2只显示最新的应用程序协议在性能、安全性和可靠性方面都是赢家。

HTTP1.1出了什么问题?

HTTP1.1仅限于每个TCP连接仅处理一个未完成的请求,迫使浏览器使用多个TCP连接同时处理多个请求。

然而,并行使用太多TCP连接会导致TCP拥塞,从而导致网络资源的不公平垄断。使用多个连接处理额外请求的Web浏览器占用了更多的可用网络资源,从而降低了其他用户的网络性能。

从浏览器发出多个请求也会导致数据传输线路上的数据重复,这反过来又需要额外的协议来提取所需的信息,而避免在终端节点上出现错误。

互联网行业不得不采用诸如数据共享、区域连接、数据内联和spriting等方法来破解这些限制。HTTP1.1基于TCP连接,它的效率低下还会导致资源优先级较低,随着web应用程序在复杂性、功能和范围方面的增长,性能会出现指数级下降。

web的发展已经远远超出了基于http的传统网络技术的能力。十多年前开发的HTTP1.1的核心特性为限制了性能,并有许多安全漏洞。

例如,Cookie黑客允许网络罪犯重用以前的工作会话来破坏帐户密码,因为HTTP1.1没有提供会话端点标识设施。虽然类似的安全问题将继续困扰HTTP/2,但是新的应用程序协议具有更好的安全功能,比如改进了新的TLS特性的实现。

HTTP / 2功能升级

多路复用

通过HTTP/2协议发送的双向文本格式帧序列在服务器和客户机之间交换,称为“流”。HTTP协议的早期迭代一次只能传输一个流,每个流传输之间有一定的时间延迟。

通过逐个发送的流接收大量的媒体内容既低效又消耗资源。HTTP/2的更改帮助建立了一个新的二进制框架层来解决这些问题。

该层允许客户端和服务器将HTTP有效负载分解为小的,独立且可管理的交错帧序列。 然后在另一端重新组装该信息。

二进制帧格式支持多个并发开放的独立双向序列的交换,连续流之间没有延迟。这种方法提供了HTTP/2的一系列好处,解释如下:

  • 并行多路复用的请求和响应不会相互阻塞。
  • 在传输多个数据流的情况下,使用一个TCP连接来确保有效地利用网络资源。
  • 不需要应用不必要的优化技巧(例如图像精灵、连接和域分片等),这些技巧会损害网络性能的其他方面。
  • 减少延迟,更快的网络性能,更好的搜索引擎排名。
  • 减少运营网络和IT资源的运营成本和资本支出。

使用此功能,来自多个流的数据包本质上是混合的,并通过一个TCP连接传输。然后,这些包在接收端被分割,并表示为单独的数据流。使用HTTP版本1.1或更早版本同时传输多个并行请求需要多个TCP连接,尽管以更快的速度传输更多的数据流,但这本质上限制了整体网络性能。

HTTP / 2服务器推送

该功能允许服务器向客户机发送额外的可缓存信息,这些信息没有被请求,但是在将来的请求中可以预见到。例如,如果客户机请求资源X,并且可以理解资源Y是与所请求的文件一起引用的,则服务器可以选择将Y与X一起推入,而不是等待适当的客户机请求。

客户机将推入的资源Y放入缓存中,以备将来使用。该机制节省了请求-响应的往返过程,并降低了网络延迟。服务器推送最初是在谷歌的SPDY协议中引入的。包含伪头(如:path)的流标识符允许服务器发起对必须可缓存的信息的推送。客户机必须显式地允许服务器使用HTTP/2推送可缓存资源,或者使用特定的流标识符终止已推送的流。

其他HTTP/2更改,如服务器主动推送更新或使客户端缓存失效,也称为“缓存推送”。长此以往的结果就是,增强了服务器识别客户端什么想要什么不想要。

HTTP/2实现为推送资源提供了显著的性能,HTTP/2的其他优点解释如下:

  • 客户端将推送的资源保存在缓存中。
  • 客户端可以跨不同页面重用这些缓存资源。
  • 服务器可以在同一TCP连接中复用推送的资源以及最初请求的信息。
  • 服务器可以优先推送推送的资源 - 这是HTTP / 2与HTTP1的关键性能差异。
  • 客户端可以拒绝推送资源以维护缓存资源的有效存储库或完全禁用服务器推送。
  • 客户端还可以限制同时复用的推送流的数量。

类似的推送功能在次优技术中已经可用,比如内联来推送服务器响应,而服务器推送提供了协议级的解决方案来避免复杂性,其优化技巧仅次于应用程序协议本身的基线功能。

HTTP/2多路复用并对推送的数据流进行优先级排序,以确保与其他请求-响应数据流一样具有更好的传输性能。作为一种内置的安全机制,必须授权服务器提前推送资源。

二进制协议

最新的HTTP版本在功能和属性方面有了显著的改进,比如从文本协议转换为二进制协议。HTTP1。用于处理文本命令以完成请求-响应循环。HTTP/2将使用二进制命令(在1和0中)执行相同的任务。这个属性减轻了构建框架的复杂性,并简化了命令的实现,这些命令由于包含文本和可选空格而混淆在一起。

虽然与文本命令相比,读取二进制文件可能会花费更多的精力,但是对于网络来说,生成和解析二进制文件中可用的帧更容易。实际语义保持不变。

使用HTTP / 2实现的浏览器会在通过网络传输之前将相同的文本命令转换为二进制文件。 二进制成帧层不与HTTP1.x客户端和服务器向后兼容,而是与SPDY和HTTP1.x相比具有显着性能优势的关键推动因素。 使用二进制命令为互联网公司和在线业务提供关键业务优势,详见HTTP / 2的优点,如下所述:

  • 解析数据的开销很低 - 这是HTTP / 2与HTTP1的关键价值主张。
  • 不容易出错。
  • 更轻的网络足迹。
  • 有效的网络资源利用率
  • 消除与HTTP1.x的文本性质相关的安全问题,例如响应分裂攻击。
  • 启用HTTP / 2的其他功能,包括压缩,多路复用,优先级排序,流量控制和TLS的有效处理。
  • 紧凑的命令表示,便于处理和实现。
  • 在客户端和服务器之间处理数据方面高效且稳健。
  • 减少网络延迟并提高吞吐量。

流优先级

HTTP / 2实现允许客户端提供对特定数据流的偏好。 虽然服务器不一定遵循客户端的这些指令,但该机制允许服务器根据最终用户要求优化网络资源分配。

流优先级处理依赖项和分配给每个流的权重。虽然所有流都是内在地相互依赖的,但是依赖流也被分配了1到256之间的权重。流优先级机制的细节仍然存在争议。

然而,在现实世界中,服务器很少能够控制CPU和数据库连接等资源。实现的复杂性本身阻止服务器适应流优先级请求。这方面的研究和开发对于HTTP/2的长期成功尤其重要,因为该协议能够使用一个TCP连接处理多个数据流。

此功能可以导致服务器请求同时到达,这些请求实际上在最终用户方面具有不同的优先级。 随机阻止数据流处理请求会破坏HTTP / 2更改所承诺的效率和最终用户体验。 同时,智能且广泛采用的流优先级排序机制提出了HTTP / 2的优点,解释如下:

  • 有效的网络资源利用率
  • 减少了传递主要内容请求的时间。
  • 提高了页面加载速度和最终用户体验。
  • 客户端和服务器之间的优化数据通信。
  • 减少网络延迟问题的负面影响。

猜你喜欢

转载自blog.csdn.net/weixin_41900808/article/details/88382160