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帧来拒收。主动推送遵守同源策略,服务器不会任意推送第三方资源给客户端。

相关推荐
齐鲁大虾5 小时前
如何彻底解决从公网HTTP页面请求私有HTTP资源跨域问题
网络·网络协议·http
韩曙亮6 小时前
【Flutter】Flutter 中的 Android / iOS 特殊配置 ① ( 网络权限配置 | HTTP 明文传输配置 | 应用名称配置 )
android·网络·flutter·http·ios·网络权限
WIZnet9 小时前
W55RP20-EVB-MKR 模块 MicroPython 实战 (11):HTTP 协议与 OneNET 平台数据上云
网络·网络协议·http
许彰午9 小时前
微服务安全上下文的透明传递——ThreadLocal透传与HTTP头转发的完整链路
安全·http·微服务
触底反弹9 小时前
从 Bun 到 DeepSeek:用 TypeScript 构建你的第一个 AI Agent
人工智能·http·typescript
遇事不決洛必達10 小时前
【爬虫随笔】深入理解 HTTP/HTTPS 协议、接口交互与会话机制
爬虫·网络协议·http·https·session
华山令狐虫11 小时前
DBAPI 接入 Milvus 向量数据库:HTTP 执行器参数映射实战
数据库·http·milvus·dbapi
代码中介商1 天前
HTTP 完全指南(最终篇):CORS 跨域资源共享深度详解
网络·网络协议·http
abcefg_h1 天前
HTTP 协议版本演进:从 TCP 连接到 QUIC
网络·网络协议·http
xxlyss&w1 天前
Tenda AC9 V15.03.05.19(6318)_CN FUN_000384c8 — HTTP CGI 命令注入
网络·网络协议·http