当前位置: 首页 > news >正文

【计算机网络】HTTP/1.0,HTTP/1.1,HTTP/2,HTTP/3汇总讲解,清晰表格整理面试重点对比

表格汇总

对比维度HTTP/1.0HTTP/1.1HTTP/2HTTP/3
传输协议TCPTCPTCP/TLS(默认加密)UDP(基于 QUIC 协议)
连接方式短连接(每次请求/响应后断开)引入持久连接(Persistent Connection),默认长连接多路复用(同一连接处理多个请求)多路复用(基于 UDP减少连接建立延迟
头部处理纯文本,无压缩纯文本,部分缓存优化(如条件请求)二进制分帧HPACK 算法压缩头部二进制格式QPACK 算法进一步压缩头部
性能问题线头阻塞严重;连接频繁创建销毁开销大缓解线头阻塞(管道化技术,但未完全解决);同一域名并发连接数有限(6-8 个)解决线头阻塞单连接承载所有请求,减少连接开销低延迟减少 TCP 握手和 TLS 协商时间
安全特性无内置加密无内置加密,需依赖 SSL/TLS强制 TLS 加密,安全性高基于 TLS 1.3,安全性进一步提升
特性汇总简单请求/响应模式每次请求需建立新连接,性能低、安全性差支持长连接,减少连接开销;引入缓存控制断点续传等优化,但仍存在线头阻塞基于二进制分帧多路复用解决线头阻塞;默认加密,性能与安全性显著提升基于 UDP 和 QUIC,进一步降低延迟,抗网络拥塞能力强,安全性更高

一句话版本,及常见追问分析

  • HTTP/1.0:采用短连接,每次请求都需重新建立和断开 TCP 连接,纯文本头部无压缩,性能较低且存在严重线头阻塞问题。

HTTP/1.0
追问:HTTP/1.0 的短连接机制,具体会带来哪些性能损耗
回答:短连接每次请求都需经历 TCP 的三次握手建立连接,请求完成后通过四次挥手断开连接。这个过程涉及多次网络往返(RTT),会消耗额外的时间和资源。特别是对于包含大量资源请求的网页,频繁创建和销毁连接会导致明显的延迟,同时增加服务器的连接管理开销降低整体传输效率

  • HTTP/1.1:默认使用持久连接减少连接开销,支持管道化部分缓解线头阻塞,引入缓存控制和断点续传,但纯文本头部有限的并发连接仍制约性能。

HTTP/1.1
追问:HTTP/1.1 的管道化技术为什么没有彻底解决线头阻塞问题?
回答:管道化允许客户端在一个 TCP 连接上连续发送多个请求无需等待响应,但服务器仍需按顺序处理返回响应。如果前面请求因处理复杂或网络问题耗时较长后续请求的响应就会被阻塞,依然存在线头阻塞。并且,由于不同浏览器对管道化的支持程度不一,实际应用中很多浏览器出于兼容性和稳定性考虑,默认关闭该功能。

  • HTTP/2:基于 TCP,通过二进制分帧多路复用彻底解决线头阻塞,利用 HPACK 算法压缩头部,支持服务器推送,默认强制 TLS 加密,显著提升性能与安全性 。

HTTP/2
追问:HTTP/2 的二进制分帧和多路复用如何配合解决线头阻塞
回答:二进制分帧将数据分割为更小二进制帧,每个帧带有唯一标识,可在连接中独立传输;多路复用则允许这些帧在同一 TCP 连接上混合交错传输。这样一来,多个请求和响应的帧能同时在连接中流动服务器可以并行处理请求,按任意顺序返回帧,客户端再根据帧标识重新组装数据。即使某个请求的处理耗时较长,也不会影响其他请求帧的传输和响应,从而彻底解决线头阻塞问题。

  • HTTP/3:基于 UDP 的 QUIC 协议,进一步降低连接建立延迟,减少 TCP 握手和 TLS 协商时间,具备更强的抗网络拥塞能力,结合 QPACK 头部压缩TLS 1.3,实现低延迟与高安全性。

HTTP/3
追问:HTTP/3 选择 UDP 替代 TCP 作为传输层协议,主要解决了哪些 TCP 的固有问题
回答:TCP 存在握手延迟(至少 1 个 RTT 完成三次握手)、队头阻塞单个数据包丢失会阻塞整个连接)以及拥塞控制策略复杂(慢开始、拥塞避免、快速重传、快速恢复)等问题拥塞控制四大算法精简总结可看我的这篇文章【计算机网络】高频计网面试总结。HTTP/3 基于 UDP 的 QUIC 协议,通过 0-RTT(零往返时间)连接恢复减少握手延迟,利用流级别的多路复用,避免单个流阻塞影响其他流,同时集成了更高效拥塞控制算法和加密机制,在弱网环境下能显著降低延迟提升传输性能抗网络抖动能力。


https://github.com/0voice

http://www.xdnf.cn/news/475129.html

相关文章:

  • 本地跑通vue-element-admin项目
  • 踩坑:uiautomatorviewer.bat 打不开
  • A Neural Approach to Blind Motion Deblurring论文阅读
  • 如何安装cuda版本的pytorch
  • matlab与python问题解析
  • Flink SQL、Hudi 、Doris在数据上的组合应用
  • 深度剖析:Dify+Sanic+Vue+ECharts 搭建 Text2SQL 项目 sanic-web 的 Debug 实战
  • 【Rust闭包】rust语言闭包函数原理用法汇总与应用实战
  • 嵌入式EasyRTC音视频实时通话SDK在工业制造领域的智能巡检/AR协作等应用
  • 【Linux】Shell脚本中向文件中写日志,以及日志文件大小、数量管理
  • 小波变换+注意力机制成为nature收割机
  • 【设计模式】- 结构型模式
  • MySQL的存储过程
  • C语言进阶-数组和函数
  • 青少年编程与数学 02-019 Rust 编程基础 15课题、错误处理
  • Python连接redis
  • XML简要介绍
  • 模拟jenkins+k8s自动化部署
  • 济南超算研究所面试问题
  • MAX6749KA-T硬件看门狗调试
  • 医学影像系统性能优化与调试技术:深度剖析与实践指南
  • 一台入网的电脑有6要素, 机器名,mac,ip,俺码,网关,dns,分别有什么作用
  • ReinboT:通过强化学习增强机器人视觉-语言操控能力
  • 微信小程序:封装request请求、解决请求路径问题
  • Vue3 加快页面加载速度 使用CDN外部库的加载 提升页面打开速度 服务器分发
  • 云计算与大数据进阶 | 26、解锁云架构核心:深度解析可扩展数据库的5大策略与挑战(上)
  • Kubernetes 1.28 无 Docker 运行时环境下的容器化构建实践:Kaniko + Jenkins 全链路详解
  • 学习threejs,使用Physijs物理引擎,各种constraint约束限制
  • 分布式锁: Redisson 实现分布式锁的原理与技术细节
  • 前端下载ZIP包方法总结