介绍
HTTP / 2是 超文本传输协议 或HTTP [01],浏览器用于与Web服务器通信。 源自较早的SPDY [02] 自2年RFC 1.1中HTTP / 2068标准化以来,HTTP / 1997是HTTP的第一个新版本。
它是由Internet工程任务组(IETF)HTTP工作组开发的 httpbis (其中“ bis”表示“两次”),并发布为RFC 7540 [03] 五月2015。
HTTP / 2采纳
自从正式发布以来,HTTP / 2已被工作网站越来越多地采用。 在线调查服务W3Techs [04] 注意到从2017年2018月到2年16月,HTTP / 30支持从所有受监视网站的XNUMX%增长到XNUMX%。
此外,主要的浏览器(例如Chrome,Firefox,Edge等)已经提供了对HTTP / 2的完全支持 [05]。 (有些人甚至在HTTP / 2被接受为标准之前就开发了实验性的实现。)
这种广泛的采用意味着HTTP / 2有可能成为Web的事实上的通信协议。
HTTP / 2背后的动机
HTTPBIS宪章 [06] 提到了HTTP / 1.1的几个组件,这些组件可以作为HTTP / 2的动机加以改进。 但是,该小组的主要目标是减少最终用户感知的延迟。
要做到这一点, httpbis 考虑通过头压缩和积极的预取技术(例如服务器推送)来最小化带宽开销,同时尝试系统地解决已知的性能问题,例如连接拥塞和线头(HoL)阻塞问题 [07].
而且,HTTP / 2必须向后兼容,这意味着它必须使用与HTTP / 1.1中相同的方法动词,状态代码,URI和(大多数)标头字段。 HTTP / 2还必须设计为支持常见的HTTP用例,例如台式机和移动Web浏览器,编程接口,代理和防火墙。
为了保持这种兼容性,工作组开发了一种协议协商机制,该机制将允许客户端和服务器在HTTP / 1.1,HTTP / 2甚至非HTTP协议之间进行选择。
那么HTTP / 2中有什么新功能?
HTTP / 2仍使用HTTP / 1.1中使用的相同URI方案和端口号(即,端口80用于 http
URI和端口443 https
URIs),但很多事情在后台进行了不同的处理。
最根本的变化是引入了 帧 作为HTTP / 2的基本数据单元。
传统上使用HTTP / 1.1 包 代表网络数据。 客户端使用方法动词构造请求数据包(例如, GET
or POST
),附加描述连接的标题列表以及包含应用程序数据的正文。
收到请求数据包后,HTTP / 1.1服务器以包含所请求信息的类似响应数据包进行响应。 结果,每个请求和响应周期都需要一个新的连接。
相反,HTTP / 2客户端与服务器建立单个网络连接,它们用于所有后续网络通信。 标头,用户数据,错误消息以及任何此类信息在通过网络传输之前,都打包到称为帧的不同二进制数据结构中。
这似乎是一个很小的变化,但它具有重大意义。
标头压缩
使用框架的一大好处是HTTP / 2标头打包到了 HEADER
帧,可以使用常规压缩方法进行压缩。 标头必须在任何数据之前传输,因此标头压缩可以减少HTTP / 2施加的带宽开销。
标头压缩以及以下改善HTTP / 2功能的性能在要求网络使用量最少的移动或物联网(IOT)应用程序中尤其有用。
流和多路复用
语义相关框架的独立序列称为 流。 创建流的端点(即客户端或服务器)为流分配了唯一的标识符,以便其他端点可以区分它们。
端点可以通过相同的HTTP / 2连接来交错来自多个流的帧,从而允许单个网络连接支持多个同时打开的流。 复 [08].
重用相同的连接可以缓解诸如连接拥塞和前面提到的HoL问题之类的问题,并且比以前的HTTP版本提供更好的性能和更流畅的用户体验。
流依赖性和优先级
管理多个并发流意味着某些流将先于其他流进行处理。 HTTP / 2允许开发人员(或管理员)使用以下功能微调此行为: 流依赖.
一个流可以依赖于另一个流的完整传输,然后再处理。 例如,在应该为类似内容的任何推荐之前加载网页主要内容的网站上,HTTP / 2允许根据主要内容流创建推荐流。
HTTP / 2还支持 流优先级。 也就是说,可以为每个流分配一个优先级,以建议端点应多紧急地分配资源来处理流的帧。
优先级和流依赖性有助于开发人员和网站所有者优化其网站的网络使用率,从而可以显着改善其网站的用户体验。
服务器推送
最后,HTTP / 2通过提供“推送”功能可以提高网站的性能。 HTTP / 2 Web服务器可以用数据响应更多的查询,而不是客户端最初请求的查询。 这允许服务器提供它知道Web浏览器将需要呈现页面的数据,而无需等待浏览器检查第一个响应,因此不会产生额外请求周期的开销。
服务器推送使开发人员可以完全控制浏览器呈现其网站所需的请求数量。 如果使用正确,此功能可以最大程度地减少网络开销。
自然,滥用推送功能还会浪费比实际所需更多的带宽。 因此,HTTP / 2允许客户端在第一次协商连接时请求禁用服务器推送。
HTTP / 2安全性
如果您已经读到这一点,那么应该很清楚,HTTP / 2的开发人员确实在努力提高性能。 但是,应注意,HTTP / 2还可帮助整体提高浏览器用户的安全性。
更具体地说,为HTTP URI(即未加密)和HTTPS URI(通过 TLS 加密的频道)。 尽管标准本身不需要使用加密,但是所有主要的浏览器实现(例如Firefox) [09],Chrome,Safari,Opera,IE,Edge)已决定 仅由 支持HTTP / 2以上 TLS.
实际上,浏览器通过加密区分明文HTTP / 2和HTTP / 2 TLS 作为两种不同的协议。 加密的HTTP / 2被称为 h2
清晰的文字 h2c
。 在撰写本文时,主要的浏览器都不支持 h2c
,表示 TLS 加密对于网站来说是强制性的,以便利用HTTP / 2的其他优点。 因此,当HTTP / 2成为默认的网络协议时,尚未升级到SSL /的旧版网站所有者TLS,最终将有强烈的动力去做。
总结
HTTP / 2的广泛采用将带来一个新的改进的Web。 它速度更快,需要的带宽更少,并且可以帮助网站保持安全。 它的主流采用肯定会确保整体Web用户体验更加流畅和安全。
立即获得证书,以后再加入我们。