罗剑锋透视HTTP协议学习笔记---30 | 时代之风(上):HTTP/2特性概览

44 篇文章 6 订阅
HTTP/2摒弃了HTTP/1的小版本号,采用二进制格式,引入流和帧的概念实现多路复用,解决队头阻塞问题。同时,使用HPACK算法压缩头部,提高性能。兼容HTTP/1,维持URI不变,通过字典同步实现头部压缩。此外,强化了安全性,采用TLS1.2+。HTTP/2h2c为明文形式,适合内部学习和低安全需求场景。
摘要由CSDN通过智能技术生成

30 | 时代之风(上):HTTP/2特性概览

为什么不是 HTTP/2.0
HTTP/2的前身是GOOGLE研发的SPDY协议,经过IETF的规范,目前的标准是RFC7540。
HTTP/2的命名不是HTTP/2.0,它摒弃了小版本号,以后只有HTTP/2,HTTP/3。这是因为HTTP是互联网基础技术,版本的进化需要相对的稳定性,频繁的版本变容易造成混乱。

兼容 HTTP/1
因为有大量现有资源基于HTTP/1,所以必须要兼容HTTP/1。HTTP/2在URI层面,没有引入新的scheme,还是http和https。另外,把HTTP分为语义和语法2部分,语义方面如请求/应答模式,URI,状态码,头字段等概念仍沿用HTTP/1,消除了学习成本,上层应用无需修改,即可无缝移植。但具体的底层实现则不同,甚至差别很大,比如采用了二进制编码,取消了版本号,引入了流,帧等概念。

头部压缩
HTTP/2中引入HPACK算法对头部进行压缩。
压缩的必要性:HTTP头部通常很大,而实体很小,尤其是GET方法。例如,实例:30-1,头部有530个字符,而实体只有94个字符。
具体实现:HPACK,两端建立字典,用索引替代头字段,并对数字,字符采用哈夫曼编码,大幅减少了需要传输的头字段字节数,并随着时间的推移,字典复用率越高,压缩效果越好。
如何同步字典是个问题。

二进制格式
HTTP/2中消息格式采用二进制方式,易于计算机实现,消除ASCII码明文消息带来的歧义和处理复杂性。另外采用二进制编码需要的字节数也更少,比如数字10000,采用ASCII编码,需要5个字节,而二进制编码只需2个字节。

虚拟的“流”
多路复用:多路指的是虚拟的流,复用是指复用同一个TCP连接。
HTTP/2中引入了流,帧等概念,实现多路复用,消除了HTTP层面的头部阻塞。
HTTP/2中的消息,流和帧的关系:
HTTP/2中主要的工作逻辑还是收发模式,一条HTTP/2消息,从用户角度看,对应一次HTTP请求或回应。从实现角度看,一条消息对应一个流,流由若干个帧组成,用ID标识帧所属的流,每个帧是消息的一部分,是流的具体实现,所以说HTTP/2中的流是虚拟的。

强化安全
采用TLS1.2+,强化了安全性

协议栈
基于TCP/TLS1.2+,实现了HPACK和Stream

问题:如何保证帧的接收的有序性?TCP序号保证?是的

课后作业

你觉得明文形式的 HTTP/2(h2c)有什么好处,应该如何使用呢?
HTTP/2 h2c明文形式方便内部学习,培训,或内部对于安全性要求不高的情况。
注:HTTP/2 h2c建立连接时协商升级过程和HTTP/2是不同的。
HTTP/2 h2使用的是TLS的ALPN,而HTTP/2 h2c使用的是connection和upgrade头字段。

你觉得应该怎样理解 HTTP/2 里的“流”,为什么它是“虚拟”的?
HTTP/2的流对应于HTTP中的消息,但TCP上传递的不是流而是帧,帧是消息的片段,用流ID标记帧属于哪个流,从逻辑上看,仿佛由帧构成的若干的流在服务端客户端之间流动,所以流是虚拟的。

你能对比一下 HTTP/2 与 HTTP/1、HTTPS 的相同点和不同点吗?
相同点,它们都是web服务的重要支撑技术,负责数据的点到点传输。
区别:
HTTP/1明文,无安全性,性能不足,有队头阻塞问题。
HTTPS 相对HTTP/1增加了安全性,其它一样。
HTTP/2相对HTTP/S,提高了性能,解决了HTTP层面的队头阻塞问题,服务器可以主动推送数据。
提升性能是通过压缩头字段
解决HTTP队头阻塞是通过引入流和帧,虚拟的流通过TCP收发,某个流的阻塞不会影响其它流的收发,故而解决了HTTP队头阻塞问题。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值