http1和http2的主要区别

主要有四个方面:

  • 二进制分帧
  • 多路复用
  • 服务器主动推送
  • 头部压缩

将前两点结合来说,首先 二进制分帧

帧:HTTP/2 数据通信的最小单位;

消息:HTTP/2 中,例如在请求和响应等操作中,消息由一个或多个帧组成;

流:存在于连接中的一个虚拟通道。流可以承载双向消息,每个流都有一个唯一的整数ID。

而二进制分帧是发生在应用层和传输层 中间产生的一层二进制分帧层 中,将 请求头和请求行 封装为 HEADER FRAME,请求体封装为 DATA FRAME。HTTP 1.x 采用文本格式传输数据,HTTP/2 采用二进制格式传输数据,二进制协议解析起来更高效。

接下来是 多路复用

HTTP 1.x 中,想并发多个请求时,必须建立多个 TCP 链接,并且浏览器为了控制资源,还会对单个域名有 6-8个的TCP链接请求限制。

而HTTP/2 可以实现 多流并行,利用单个连接可以承载任意数量的双向数据流。

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

然后是 头部压缩

HTTP/1.x 会在请求和响应中一直携带冗长的头部数据,给网络带来额外的负担。

HTTP/2在客户端和服务器端使用"首部表"来跟踪和存储之前发送的键-值对,对于相同的数据,不再重复发送,每个新的首部键-值对会进行追加或替换操作[只发送差异数据,而不是全部发送,从而减少头部的信息量]。首部表在HTTP/2的连接存续期内始终存在,由客户端和服务器共同渐进地更新。

最后是 服务器主动推送

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

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

相关推荐
国服第二切图仔1 天前
Electron for 鸿蒙PC实战案例Gitcode口袋工具之HTTP请求封装的技术实现与设计解析
http·electron·gitcode
cccyi71 天前
HTTP 协议详解:从基础到核心特性
网络协议·http·应用层
特种加菲猫1 天前
HTTP协议核心机制解析
网络·网络协议·http
重生之我是Java开发战士1 天前
【Java SE】HTTP与HTTPS通信协议
java·http·https
zt1985q1 天前
外部访问 Python 搭建的 HTTP 服务器
运维·服务器·网络·windows·网络协议·http
熙客1 天前
HTTP Client介绍
网络·网络协议·http
Arva .2 天前
HTTP vs. HTTPS 有什么区别?
http·https
西瓜树枝2 天前
前端必读:HTTP 协议核心知识全景图(三)—— 响应头详解
前端·http
IUGEI2 天前
【计算机网络】HTTP/3如何实现可靠传输?
java·网络·后端·网络协议·tcp/ip·计算机网络·http
爱学习的大牛1232 天前
基于 FRP 实现内网穿透的跨网络 HTTP 服务转发方案
网络·网络协议·http