超文本传输协议 (HTTP) 是一种简单、受限且最终乏味的应用层协议,它构成了万维网的基础。从本质上讲,HTTP可以检索网络世界中可用的网络连接资源,并且经过几十年的发展,为数字通信提供快速、安全和丰富的媒体。
如果您沉迷于优化网站的加载时间,我们之前已经发布了许多关于该主题的指南,只需查看网站速度优化初学者指南。我们应该始终处于新技术的最前沿,确保网站都在HTTP/2上运行。这一广泛的信息资源为追求创新的最终用户、开发人员和企业解释了HTTP/2。从基本信息到更高级的主题,您将了解有关HTTP/2的所有信息。
- 什么是HTTP/2
- 创建HTTP/2的目标
- HTTP1.1有什么问题?
- HTTP/2功能升级
- HTTP1.x、SPDY和HTTP/2之间的功能相似性
- HTTP/2如何与HTTPS配合使用
- HTTP/2的主要优点
- HTTPS、SPDY和HTTP/2的性能基准比较
- HTTP/2浏览器支持和可用性
- 如何开始使用HTTP/2
什么是HTTP/2?
HTTP最初由万维网先驱Tim Berners-Lee提出, 他在设计应用协议时考虑到了简单性,以在Web服务器和客户端之间执行高级数据通信功能。
HTTP的第一个文档版本于1991年发布为HTTP0.9,随后在1996年正式引入和认可HTTP1.0。HTTP1.1于1997年紧随其后,此后几乎没有得到迭代改进。
HTTP时间轴
2015年2月,互联网工程任务组 ( IETF ) HTTP工作组对HTTP进行了修订,并以HTTP/2的形式开发了应用协议的第二个主要版本。2015年5月,HTTP/2实现规范正式标准化,以响应Google的HTTP兼容SPDY协议。HTTP/2与SPDY的争论贯穿整个指南。
什么是协议?
HTTP/2与HTTP1的辩论必须先简要介绍本资源中常用的术语协议。协议是一组规则,用于管理客户端(例如Internet用户用于请求信息的Web浏览器)和服务器(包含所请求信息的机器)之间的数据通信机制。
协议通常由三个主要部分组成:Header、Payload和Footer。放置在有效负载之前的标题包含诸如源地址和目标地址以及有关有效负载的其他详细信息(例如大小和类型)等信息。有效载荷是使用协议传输的实际信息。页脚跟随有效载荷并作为控制字段将客户端-服务器请求与标题一起路由到预期的接收者,以确保有效载荷数据的传输没有错误。
Mail HTTP/2
该系统类似于邮政邮件服务。将信件(有效载荷)插入写有目的地地址的信封(页眉)中,并在发送前用胶水和邮票(页脚)密封。除了以0和1的形式传输数字信息并不那么简单,并且需要进行新的维度创新以应对随着互联网使用量的爆炸性增长而出现的技术进步。
HTTP协议最初由基本命令组成:GET,从服务器检索信息和POST,将请求的信息传递给客户端。这组简单而明显无聊的获取数据和POST响应的几个命令基本上构成了构建其他网络协议的基础。该协议是改善互联网用户体验和效率的又一举措,需要实施HTTP/2以增强在线状态。
创建HTTP/2的目标
自20世纪90年代初成立以来,HTTP只经历了几次重大改革。最新版本HTTP1.1已为网络世界服务超过15年。在当前动态信息更新、资源密集型多媒体内容格式和对网络性能的过度倾向的当前时代,网页已将旧的协议技术置于遗留类别中。这些趋势需要对HTTP/2进行重大更改以改善Internet体验。
上网体验
研究和开发新版HTTP的主要目标围绕着三个很少与单一网络协议相关联的品质,而不需要额外的网络技术——简单性、高性能和健壮性。这些目标是通过引入使用多路复用、压缩、请求优先级和服务器推送等技术来减少处理浏览器请求的延迟的功能来实现的。
流量控制、升级和错误处理等机制可作为HTTP协议的增强功能,为开发人员确保基于Web的应用程序的高性能和弹性。
集体系统允许服务器以比客户端最初请求的内容更多的内容进行有效响应,从而消除用户干预以不断请求信息,直到网站完全加载到Web浏览器上。例如,带有HTTP/2的服务器推送功能允许服务器响应页面的完整内容,而不是浏览器缓存中已有的信息。HTTP头文件的有效压缩可最大限度地减少协议开销,以提高每个浏览器请求和服务器响应的性能。
HTTP/2更改旨在保持与HTTP1.1的互操作性和兼容性。基于现实世界的实验,预计HTTP/2的优势会随着时间的推移而增加,并且它在与HTTP1.1的现实世界比较中解决性能相关问题的能力将极大地影响其长期发展。
……我们不会取代所有的HTTP——你今天使用的方法、状态代码和大多数标头都将是相同的。相反,我们正在重新定义它如何“在线”使用,因此它更高效,并且对互联网本身更温和…… Mark Nottingham,IETF HTTP工作组主席和W3C TAG成员. 来源
需要注意的是,新的HTTP版本是对其前身的扩展,预计不会很快取代HTTP1.1。HTTP/2实现不会自动支持HTTP1.1可用的所有加密类型,但肯定会在不久的将来为更好的替代方案或其他加密兼容性更新打开大门。然而,HTTP/2与HTTP1和SPDY与HTTP/2等功能比较仅表明最新的应用程序协议在性能、安全性和可靠性等方面都是赢家。
HTTP/2安全加密
HTTP1.1有什么问题?
HTTP1.1被限制为每个TCP连接只处理一个未完成的请求,迫使浏览器使用多个TCP连接同时处理多个请求。
但是,并行使用过多的TCP连接会导致TCP拥塞,从而导致对网络资源的不公平垄断。使用多个连接来处理额外请求的Web浏览器会占用更多可用网络资源,从而降低其他用户的网络性能。
HTTP请求
从浏览器发出多个请求也会导致数据传输线上的数据重复,这反过来又需要额外的协议来在端节点无错误地提取所需的信息。
互联网行业自然被迫通过域分片、串联、数据内联和精灵等实践来破解这些限制。HTTP1.1底层TCP连接的无效使用也会导致资源优先级不佳,随着Web应用程序在复杂性、功能和范围方面的增长,导致性能呈指数级下降。
域分片
Web的发展远远超出了传统的基于HTTP的网络技术的能力。十多年前开发的HTTP1.1的核心品质为几个令人尴尬的性能和安全漏洞打开了大门。
例如,Cookie Hack允许网络犯罪分子重用以前的工作会话来破坏帐户密码,因为HTTP1.1不提供会话端点身份设施。虽然类似的安全问题将继续困扰HTTP/2,但新的应用程序协议的设计具有更好的安全功能,例如新TLS功能的改进实现 。
HTTP/2功能升级
Multiplexed streams
通过服务器和客户端之间交换的HTTP/2协议发送的文本格式帧的双向序列称为“流”。HTTP协议的早期迭代一次只能传输一个流,每个流传输之间有一定的时间延迟。
通过逐个发送的单个流接收成吨的媒体内容既低效又消耗资源。HTTP/2的变化有助于建立一个新的二进制帧层来解决这些问题。
该层允许客户端和服务器将HTTP有效负载分解为小型、独立和可管理的交错帧序列。然后在另一端重新组装此信息。
HTTP/2流
二进制帧格式允许在连续流之间无延迟地交换多个并行开放的独立双向序列。这种方法提供了HTTP/2的一系列好处,如下所述:
- 并行复用的请求和响应不会相互阻塞。
- 尽管传输多个数据流,但仍使用单个TCP连接来确保有效的网络资源利用。
- 无需应用不必要的优化技巧 ——例如图像精灵、串联和域分片等——会损害网络性能的其他领域。
- 减少延迟,更快的网络性能,更好的搜索引擎排名。
- 降低运行网络和IT资源的运营支出和资本支出。
使用此功能,来自多个流的数据包基本上混合并通过单个TCP连接传输。然后这些包在接收端被拆分并作为单独的数据流呈现。使用HTTP 1.1或更早版本同时传输多个并行请求需要多个TCP连接,尽管以更快的速率传输更多数据流,但它本质上会限制整体网络性能。
HTTP/2服务器推送
此功能允许服务器向客户端发送额外的可缓存信息,这些信息未被请求但在未来的请求中预计会出现。例如,如果客户端请求资源X并且知道资源Y被请求的文件引用,则服务器可以选择将Y与X一起推送,而不是等待适当的客户端请求。
HTTP/2推送
客户端将推送的资源 Y 放入其缓存中以备将来使用。这种机制节省了请求-响应往返并减少了网络延迟。服务器推送最初是在 Google 的 SPDY 协议中引入的。包含伪标头(例如:path)的流标识符允许服务器启动必须可缓存的信息的推送。客户端必须明确允许服务器使用 HTTP/2 推送可缓存资源或终止具有特定流标识符的推送流。
其他 HTTP/2 更改(例如服务器推送)会主动更新或使客户端的缓存失效,也称为“缓存推送”。长期后果集中在服务器识别客户端实际上不想要的可能的可推送资源的能力上。
HTTP/2 实现为推送资源提供了显着的性能,下面解释了 HTTP/2 的其他好处:
- 客户端将推送的资源保存在缓存中。
- 客户端可以跨不同页面重用这些缓存资源。
- 服务器可以在同一 TCP连接内复用推送的资源以及最初请求的信息。
- 服务器可以优先推送资源——这是HTTP/2与HTTP1的关键性能区别。
- 客户端可以拒绝推送资源以维护缓存资源的有效存储库或完全禁用服务器推送。
- 客户端还可以限制并发复用的推送流的数量。
类似的推送功能已经通过次优技术提供,例如内联推送服务器响应,而服务器推送提供了一种协议级解决方案,以避免与应用协议本身的基线功能次要的优化黑客的复杂性。
HTTP/2对推送的数据流进行多路复用和优先级排序,以确保与其他请求-响应数据流一样具有更好的传输性能。作为一种内置的安全机制,必须事先授权服务器才能推送资源。
HTTP/2授权
二进制协议
最新的HTTP版本在功能和属性(例如从文本协议转换为二进制协议)方面有了显着的发展。HTTP1.x用于处理文本命令以完成请求-响应循环。HTTP/2将使用二进制命令(在1和0中)来执行相同的任务。此属性简化了框架的复杂性,并简化了由于包含文本和可选空格的命令而容易混淆的命令的实现。
尽管与文本命令相比,读取二进制文件可能需要更多的努力,但网络更容易生成和解析二进制可用的帧。实际语义保持不变。
二进制协议
使用HTTP/2实现的浏览器将在通过网络传输之前将相同的文本命令转换为二进制文件。二进制帧层与HTTP1.x客户端和服务器不向后兼容,并且是显着优于 SPDY 和 HTTP1.x 的性能优势的关键推动因素。使用二进制命令为互联网公司和在线业务提供关键业务优势,详细说明HTTP/2的优势如下:
- 解析数据的低开销——HTTP/2与HTTP1中的一个关键价值主张。
- 更不容易出错。
- 更轻的网络足迹。
- 有效的网络资源利用。
- 消除与HTTP1.x的文本性质相关的安全问题,例如响应拆分攻击。
- 启用HTTP/2的其他功能,包括压缩、多路复用、优先级、流量控制和TLS的有效处理。
- 命令的紧凑表示,以便于处理和实施。
- 在客户端和服务器之间的数据处理方面高效且稳健。
- 减少网络延迟并提高吞吐量。
流优先级
HTTP/2实现允许客户端提供对特定数据流的偏好。尽管服务器不必遵循客户端的这些指令,但该机制允许服务器根据最终用户的要求优化网络资源分配。
HTTP/2权重
流优先级与分配给每个流的依赖项和权重一起使用。尽管所有流本质上都相互依赖,但从属流也被分配了 1 到 256 之间的权重。流优先级机制的细节仍在争论中。
然而,在现实世界中,服务器很少能够控制CPU和数据库连接等资源。实现复杂性本身会阻止服务器适应流优先级请求。该领域的研究和开发对于HTTP/2的长期成功尤为重要,因为该协议能够通过单个TCP连接处理多个数据流。
此功能可导致服务器请求的同时到达,从最终用户的角度来看,这些请求实际上在优先级方面有所不同。随机延迟数据流处理请求会破坏HTTP/2更改所承诺的效率和最终用户体验。同时,智能且广泛采用的流优先级机制展示了HTTP/2的好处,解释如下:
- 有效的网络资源利用。
- 减少交付主要内容请求的时间。
- 改进了页面加载速度和最终用户体验。
- 优化客户端和服务器之间的数据通信。
- 减少网络延迟问题的负面影响。
HTTP/2页面加载
有状态的标头压缩
提供高端Web用户体验需要内容和图形丰富的网站。HTTP应用程序协议是无状态的,这意味着每个客户端请求必须包含服务器执行所需操作所需的尽可能多的信息。这种机制导致数据流携带多个重复的信息帧,这样服务器本身就不必存储来自先前客户端请求的信息。
对于提供丰富媒体内容的网站,客户端会推送多个几乎相同的标头帧,从而导致延迟和对有限网络资源的不必要消耗。如果不优化这种机制,数据流的优先混合就无法达到所需的并行性能标准。
HTTP/2 HPACK压缩
HTTP/2实现通过压缩大量冗余标头帧的能力解决了这些问题。它使用HPACK规范作为头压缩的一种简单而安全的方法。客户端和服务器都维护一个在之前的客户端-服务器请求中使用的标头列表。
HPACK在传输到服务器之前压缩每个标头的单个值,然后服务器在先前传输的标头值列表中查找编码信息以重建完整的标头信息。用于HTTP/2实现的HPACK标头压缩具有巨大的性能优势,包括下面解释的HTTP/2的一些优势:
- 有效的流优先级。
- 有效利用多路复用机制。
- 减少资源开销——这是HTTP/2与HTTP1和HTTP/2与SPDY辩论中最早关注的领域之一。
- 编码大标头以及常用标头,无需发送整个标头帧本身。每个数据流的单独传输大小迅速缩小。
- 不易受到安全攻击,例如CRIME利用压缩标头的数据流。
与HTTP1.x和SPDY的相似之处
HTTP的底层应用语义包括HTTP状态代码、URI、方法和头文件在HTTP/2的最新迭代中保持不变。HTTP/2基于SPDY,这是Google对HTTP1.x的替代方案。真正的区别在于用于处理客户端-服务器请求的机制。下图确定了HTTP1.x、SPDY和HTTP/2之间的一些相似之处和改进之处:
HTTP1.x | SPDY | HTTP2 |
---|---|---|
SSL不是必需的,但建议使用。 | 需要SSL。 | SSL不是必需的,但建议使用。 |
慢速加密。 | 快速加密。 | 甚至更快的加密。 |
每个TCP连接一个客户端-服务器请求。 | 每个TCP连接有多个客户端-服务器请求。一次在单个主机上发生。 | 多主机复用。同时在多个主机上发生。 |
没有头压缩。 | 引入了标头压缩。 | 使用改进的算法进行标头压缩,以提高性能和安全性。 |
没有流优先级。 | 引入了流优先级。 | 使用改进的流优先级机制。 |
原文地址:https://www.wbolt.com/what-is-http2.html