写点什么

网络协议之 HTTP:HTTP 1.1 与 HTTP 2

发布于: 2021 年 05 月 11 日
网络协议之HTTP:HTTP 1.1与HTTP 2

一 简介

最近的一份面试中,考察到 http1.2 和 http2.0 的理解和差别,之前对协议这里并没有深入探讨,所以今天会做一次整理。

二 HTTP2 相关文档

HTTP2 的 rfc 协议文档地址:rfc7540。HTTP/2 即 Hypertext Transfer Protocol Version 2 (HTTP/2)。如果想要全面了解且不熟悉英文的话,也可以参考rfc7540-zh-cn,这是对 rfc7540 的翻译。

三 协议详情

3.1 简介

HTTP/2 是 HTTP 协议自 1999 年 HTTP 1.1 发布后的首个更新,主要基于 SPDY 协议。由互联网工程任务组(IETF)的 Hypertext Transfer Protocol Bis(httpbis)工作小组进行开发。该组织于 2014 年 12 月将 HTTP/2 标准提议递交至 IESG 进行讨论,于 2015 年 2 月 17 日被批准。HTTP/2 标准于 2015 年 5 月以 RFC 7540 正式发表。

3.2 规范摘要

本规范描述了超文本转移协议(HTTP)语义的优化表达,称为 HTTP 第二版 HTTP/2)。通过引入头域压缩并且允许同连接上的多并发交换,HTTP/2 可以更加高效地使用网络资源并且减少延时感。本文还介绍了表现为从服务器到客户端的主动推送。

3.3 优化内容

3.3.1 二进制传输

HTTP/2 采用二进制格式传输数据,而非 HTTP 1.x 的文本格式,二进制协议解析起来更高效。 HTTP / 1 的请求和响应报文,都是由起始行,首部和实体正文(可选)组成,各部分之间以文本换行符分隔。HTTP/2 将请求和响应数据分割为更小的帧,并且它们采用二进制编码。

HTTP/2 中,同域名下所有通信都在单个连接上完成,该连接可以承载任意数量的双向数据流。每个数据流都以消息的形式发送,而消息又由一个或多个帧组成。多个帧之间可以乱序发送,根据帧首部的流标识可以重新组装。

3.3.2 多路复用支持

HTTP/2 采用多路复用来取代原来的序列和阻塞机制。所有就是请求的都是通过一个 TCP 连接并发完成。 HTTP 1.x 中,如果想并发多个请求,必须使用多个 TCP 链接,且浏览器为了控制资源,还会对单个域名有 6-8 个的 TCP 链接请求限制,当域名链接数超过限制时,请求就会被挂起等待了一段时间。

3.3.3 特性和性能提升

HTTP/2 特性:

  • 同域名下所有通信都在单个连接上完成。

  • 单个连接可以承载任意数量的双向数据流。

  • 数据流以消息的形式发送,而消息又由一个或多个帧组成,多个帧之间可以乱序发送,因为根据帧首部的流标识可以重新组装。

性能极大提升:

  • 同个域名只需要占用一个 TCP 连接,消除了因多个 TCP 连接而带来的延时和内存消耗。

  • 单个连接上可以并行交错的请求和响应,之间互不干扰。

  • 在 HTTP/2 中,每个请求都可以带一个 31bit 的优先值,0 表示最高优先级, 数值越大优先级越低。有了这个优先值,客户端和服务器就可以在处理不同的流时采取不同的策略,以最优的方式发送流、消息和帧。

3.3.4 Server Push

服务端可以在发送页面 HTML 时主动推送其它资源,而不用等到浏览器解析到相应位置,发起请求再响应。例如服务端可以主动把 JS 和 CSS 文件推送给客户端,而不需要客户端解析 HTML 时再发送这些请求。

服务端可以主动推送,客户端也有权利选择是否接收。如果服务端推送的资源已经被浏览器缓存过,浏览器可以通过发送 RST_STREAM 帧来拒收。主动推送也遵守同源策略,服务器不会随便推送第三方资源给客户端。

3.3.5 请求头压缩

HTTP 1.1 请求的大小变得越来越大,有时甚至会大于 TCP 窗口的初始大小,因为它们需要等待带着 ACK 的响应回来以后才能继续被发送。HTTP/2 对消息头采用 HPACK(专为 http/2 头部设计的压缩格式)进行压缩传输,能够节省消息头占用的网络的流量。而 HTTP/1.x 每次请求,都会携带大量冗余头信息,浪费了很多带宽资源。

发布于: 2021 年 05 月 11 日阅读数: 35
用户头像

磨炼中成长,痛苦中前行 2017.10.22 加入

微信公众号【程序员架构进阶】。多年项目实践,架构设计经验。曲折中向前,分享经验和教训

评论

发布
暂无评论
网络协议之HTTP:HTTP 1.1与HTTP 2