HTTP2.0与HTTP1.0的区别

HTTP2.0的基本单位为二进制帧

HTTP1.0利用文本与服务器交互,而HTTP2的基本协议单位为二进制帧流,每帧都有自己的类型旨在实现不同功能,然而HTTP1将继续存在,因此,HTTP2的二进制帧流需映射到HTTP1上以实现向下兼容。
HTTP2.0这么多新特性就是因为底层数据格式的改变:

+-----------------------------------------------+
|                 Length (24)                   |
+---------------+---------------+---------------+
|   Type (8)    |   Flags (8)   |
+-+-------------+---------------+-------------------+
|R|                 Stream Identifier (31)          |
+=+=================================================+
|                   Frame Payload (0...)        ...
+---------------------------------------------------+

length:表示Frame Payload部分的长度,其FrameHeader固定为9字节共72比特
type:区分Frame Payload部分是HTTP Header还是HTTP Body
Flags:8位,每一位都起标记作用,表示这个帧的类型
R:保留位
Stream Identifier:帧流ID,当开始建立连接时,先发送一个Stream ID=0的流来最初始化工作,之后从1开始发送请求/响应。

HTTP2.0中帧具有优先级

HTTP2帧具有优先级,允许客户端提供排序思路,以让服务器优先处理一部分请求,仍然是以二进制帧的形式返回数据。每个Frame Header中都有一个表示此Frame的 Stream ID,通过stream ID表示可以使所有的请求和响应同时在一条TCP连接上进行,当流并发时,流会有优先级,图片的优先级低于css文件或者js文件的优先级,这样设计可使重要的文件先下载。

HTTP2.0的多路复用

浏览器对同一域名下的并发连接数量有限制,一般为6个,HTTP1中的Keep-Alive用于长连接而不必重新建立连接,然而keep-alive必须等本次请求彻底完成后才能发送下一个请求,而HTTP2的请求与响应以二进制帧的形式交错进行,只需建立一次连接,即一轮三次握手,实现多路复用。
这里写图片描述

HTTP2.0压缩消息头

HTTP1的消息头很大冗余,而HTTP2.0利用HPACK对消息头进行压缩传输,假设将常用的请求GET/index.html用1表示,POST/index.html用2表示,即是将消息头中的不同的部分分别用不用的索引进行表示,且会用哈夫曼编码压缩字符串,最后封装成frame。索引表分为动态索引和静态索引,动态索引表在客户端和服务器端共同维护,静态索引采用硬编码形式。

HTTP2.0服务端推送

HTTP2.0中服务器主动资源推送给客户端,例如把js和css文件主动推送给客户端而不用客户端解析HTML后请求再响应。

HTTP2.0只适用于HTTPS的场景

HTTPS是在HTTP和TCP之间增加了一层SSL,即secure socket layer,增加了数据安全传输及客户端和服务器端的身份验证,而HTTP2.0只适用于HTTPS的场景。
总结

HTTP1.0的缺陷

每个请求都需单独建立连接(keep-alive能解决部分问题单不能交叉推送
每个请求和响应都需要完整的头信息
数据未加密

HTTP2.0的优势

多路复用
压缩头信息
请求划分优先级
支持服务器端主动推送

补充

(1)HTTP 2.0 致力于突破上一代标准众所周知的性能限制,但它也是对之前1.x 标准的扩展,而非替代。之所以要递增一个大版本到2.0,主要是因为它改变了客户端与服务器之间交换数据的方式,HTTP 2.0 增加了新的二进制分帧数据层
(2)二进制分帧是如何划分的?
HTTP2.0 将所有传输的信息分割为更小的消息和帧,并对它们采用二进制格式的编码。
(3)流、消息和帧的定义
流:流是连接中的一个虚拟信道,可以承载双向的消息;每个流都有一个唯一的整数标识符(1、2…N);
消息:是指逻辑上的 HTTP 消息,比如请求、响应等,由一或多个帧组成。
帧:HTTP 2.0 通信的最小单位,每个帧包含帧首部,至少也会标识出当前帧所属的流,承载着特定类型的数据,如 HTTP 首部、负荷,等等
(4)多向请求与响应
HTTP 2.0 中新的二进制分帧层突破了这些限制,实现了多向请求和响应:客户端和服务器可以把HTTP 消息分解为互不依赖的帧,然后乱序发送,最后再在另一端把它们重新组合起来

参考链接:
https://segmentfault.com/a/1190000002765886
http://geek.csdn.net/news/detail/188003
http://blog.csdn.net/zqjflash/article/details/50179235

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值