前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >HTTP/2特性概览

HTTP/2特性概览

原创
作者头像
码农架构
修改2020-10-19 10:17:41
4420
修改2020-10-19 10:17:41
举报
文章被收录于专栏:码农架构

首发公众号:码农架构

兼容 HTTP/1

保持功能上的兼容,所以 HTTP/2 把 HTTP 分解成了“语义”和“语法”两个部分:

语义

“语义”层不做改动,与 HTTP/1 完全一致(即 RFC7231)。比如请求方法、URI、状态码、头字段等概念都保留不变,这样就消除了再学习的成本,基于 HTTP 的上层应用也不需要做任何修改,可以无缝转换到 HTTP/2。

语法

完全变更了 HTTP 报文的传输格式。

头部压缩

  • 开发了专门的“HPACK”算法, 来压缩头部
    • 字典: 使用索引代表重复字段
    • 哈夫曼编码: 压缩整数和字符串

二进制格式

把原来的“Header+Body”的消息“打散”为数个小片的二进制“帧”(Frame):

  • 用“HEADERS”帧存放头数据
  • “DATA”帧存放实体数据
image.png
image.png

虚拟的“流”

HTTP/2 为此定义了一个“流”(Stream)的概念,它是二进制帧的双向传输序列,同一个消息往返的帧会分配一个唯一的流 ID (一个报文中的所有帧使用同一 ID). 你可以想象把它成是一个虚拟的“数据流”,在里面流动的是一串有先后顺序的数据帧,这些数据帧按照次序组装起来就是 HTTP/1 里的请求报文和响应报文。

因为“流”是虚拟的,实际上并不存在,所以 HTTP/2 就可以在一个 TCP 连接上用“流”同时发送多个“碎片化”的消息,这就是常说的“多路复用”( Multiplexing)——多个往返通信都复用一个连接来处理。

  • 在“流”的层面上看,消息是一些有序的“帧”序列
  • 而在“连接”的层面上看,消息却是乱序收发的“帧”
  • 多个请求 / 响应之间没有了顺序关系,不需要排队等待,也就不会再出现“队头阻塞”问题,降低了延迟,大幅度提高了连接的利用率。
image.png
image.png

为了更好地利用连接,加大吞吐量,HTTP/2 还添加了一些控制帧来管理虚拟的“流”,实现了优先级流量控制,这些特性也和 TCP 协议非常相似。

HTTP/2 还在一定程度上改变了传统的“请求 - 应答”工作模式,服务器不再是完全被动地响应请求,也可以新建“流”主动向客户端发送消息。比如,在浏览器刚请求 HTML 的时候就提前把可能会用到的 JS、CSS 文件发给客户端,减少等待的延迟,这被称为“服务器推送”(Server Push,也叫 Cache Push)。

强化安全

互联网上通常所能见到的 HTTP/2 都是使用“https”协议名,跑在 TLS 上面。

为了区分“加密”和“明文”这两个不同的版本,HTTP/2 协议定义了两个字符串标识符:“h2”表示加密的 HTTP/2,“h2c”表示明文的 HTTP/2,多出的那个字母“c”的意思是“clear text”。

协议栈

image.png
image.png

总结

  • HTTP 协议取消了小版本号,所以 HTTP/2 的正式名字不是 2.0;
  • HTTP/2 在“语义”上兼容 HTTP/1,保留了请求方法、URI 等传统概念;
  • HTTP/2 使用“HPACK”算法压缩头部信息,消除冗余数据节约带宽;
  • HTTP/2 的消息不再是“Header+Body”的形式,而是分散为多个二进制“帧”;
  • HTTP/2 使用虚拟的“流”传输消息,解决了困扰多年的“队头阻塞”问题,同时实现了“多路复用”,提高连接的利用率;
  • HTTP/2 也增强了安全性,要求至少是 TLS1.2,而且禁用了很多不安全的密码套件。

专注专注于系统架构、高可用、高性能、高并发类技术分享~
专注专注于系统架构、高可用、高性能、高并发类技术分享~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 兼容 HTTP/1
    • 语义
      • 语法
        • 头部压缩
        • 二进制格式
        • 虚拟的“流”
    • 强化安全
    • 协议栈
    • 总结
    相关产品与服务
    文件存储
    文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档