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

HTTP 进化史:从 1.0 到 3.0

第一次用 56 K「小猫」拨号上网吗?点开一张图片都要等十几秒。二十多年过去,今天的网页动辄上百个资源,却依然能做到秒开。秘诀就藏在 HTTP 协议的三次大升级里。

一、HTTP/1.0

客户端服务器TCP三次握手,建立连接请求响应TCP四次挥手,销毁连接TCP三次握手,建立连接请求响应TCP四次挥手,销毁连接客户端服务器

痛点:用完即焚的 TCP

  • 每发一次请求,浏览器都要和服务器「握手—挥手」走完全程:
    三次握手 → 发请求 → 收响应 → 四次挥手。
  • 页面里 20 张图片?那就重复 20 次。
  • 更惨的是「队头阻塞」:前一个请求卡住了,后面所有请求都得排队。

结果就是慢、浪费、带宽空转

二、HTTP/1.1

客户端服务器TCP三次握手,建立连接请求响应请求响应TCP四次挥手,销毁连接客户端服务器

1. 长连接(Keep-Alive)
请求头带上 Connection: keep-alive,TCP 不再用完就关,而是“先别挂电话,我等会儿还有事”。

2. 管道化(Pipelining)
浏览器可以不等上一个响应回来,就连续发多个请求。
可惜服务器必须按顺序回包——一旦某个包慢,后面的响应全部堵死,这就是队头阻塞

3. 曲线救国
为了“并行”,前端工程师把图片、CSS、JS 扔到不同域名,浏览器一口气开 6 条 TCP 连接,硬是靠“多开几条车道”缓解堵车。

三、HTTP/2

在这里插入图片描述

HTTP/2 不再用文本,而是把所有数据切成二进制帧。每个帧都带一个“车牌号”(流 ID),告诉接收端“我属于哪一次请求”。

核心特性

  • 多路复用
    同一根 TCP 里可以交错跑无数条“流”,谁先准备好谁先回,彻底解决队头阻塞。
  • 头部压缩(HPACK)
    把重复的 Cookie、User-Agent 等字段压缩成索引,省掉 50% 以上体积。
  • 服务器推送
    服务端猜你接下来要 app.css,于是提前把帧推过来,浏览器省一次往返。

结果:单连接也能跑满带宽,前端再也不用“域名散列”这种黑魔法。

四、HTTP/3

HTTP/2 再快,也救不了 TCP 的“老寒腿”:三次握手慢、拥塞控制保守、任何丢包都会阻塞整个管道。

于是 HTTP/3 直接把底层换成 QUIC —— 基于 UDP 的可靠传输协议。

QUIC 带来的变化

  • 0-RTT 建链
    以前需要 1.5 ~ 2 个 RTT 才能发数据,QUIC 在首次连接后把参数缓存下来,下次直接发应用数据。
  • 内建多路复用
    每个流独立编号、独立重传,丢包只影响一条流,不再“一人感冒全家吃药”。
  • 连接迁移
    手机从 4G 切到 Wi-Fi,QUIC 的 CID(连接标识)让你“换网不换链”,下载继续跑。

五、总结

HTTP/1.0  短连接  单车道  堵车
HTTP/1.1  长连接  6 车道  顺序放行
HTTP/2    单 TCP  多车道  无顺序
HTTP/3    单 QUIC 多车道  无顺序 + 丢包不堵车

从“写完就撕”的 1.0,到“拆帧并行”的 2,再到“换引擎”的 3,HTTP 的每一次升级都在回答同一个问题:如何让数据更快、更稳、更安全地到达用户

http://www.lryc.cn/news/594172.html

相关文章:

  • The FastMCP Client
  • 你的created_time字段,用DATETIME还是TIMESTAMP?
  • Python自动化测试项目实战
  • Python 模块与包导入 基础讲解
  • Haproxy算法精简化理解及企业级高功能实战
  • 如何在看板中体现任务依赖关系
  • Windows CMD(命令提示符)中最常用的命令汇总和实战示例
  • 让黑窗口变彩色:C++控制台颜色修改指南
  • 30天打牢数模基础-SVM讲解
  • Linux操作系统从入门到实战(十一)回车换行问题与用户缓冲区问题
  • 内网后渗透攻击过程(实验环境)--3、横向攻击
  • dify创建OCR工作流
  • java抗疫物质管理系统设计和实现
  • 多人在线场景下Three.js同步机制设计:延迟补偿、状态插值的工程实践
  • 07_图像容器Mat_详解
  • 元学习算法的数学本质:从MAML到Reptile的理论统一与深度分析
  • maven构建Could not transfer artifact失败原因
  • 红宝书单词学习笔记 list 51-75
  • Word for mac使用宏
  • Function Callingの进化路:源起篇
  • Node.js Express keep-alive 超时时间设置
  • 基于Pytorch的人脸识别程序
  • 【JS逆向基础】数据库之redis
  • 华为开源自研AI框架昇思MindSpore应用案例:基于ERNIE模型实现对话情绪识别
  • 对于stm32RCT6的外部中断
  • `tidyverse` 中涉及的函数及其用法
  • tabBar设置底部菜单选项、iconfont图标(图片)库、模拟京东app的底部导航栏
  • GPT-4o mini TTS:领先的文本转语音技术
  • 私有云新势力:Puter+CPolar如何低成本替代商业网盘?
  • Softhub软件下载站实战开发(十九):软件信息展示