近十年来HTTP=:物理故事_,中空},和拼凑适应 (中文 (Chinese Simplified))

近十年来HTTP=:物理故事_,中空},和拼凑适应

Sunday, 28 December 2025

//

11 minute read

HTTP曾经进化 't进化 强制 由物理和滥用改变 ,+Lantency_,+和.

每一个版本都存在, 因为上一个版本碰到了严格的限制@. @如果你理解这些限制的话#,}你就能明白为什么网络运作的方式是“-+”以及为何如此多的“MS K3+Best practices @"+”实际上就是协议限制的变通办法 weQ'_一直拖着三十年

I'自从“1997. I've debuged HTTP}连接暴风雨 , 观看浏览器打开了六个连接 每个主机的@" featal", 被HTTP{/2'}诅咒的 TCP HeadMSKO8ofMS K9在移动网络上封隔 最后看到HTppMS11 承认我们所知道的一切

这是关于我们如何来到这里的故事 .

HTTP/1.0: 永久文本超过不可信赖的管道

制造它的世界

HTTP/1.0在“1996”中设计为一个不再存在的世界。 “.为了理解它为何有效? ”你需要了解“"WebMS K5在‘1996:’中的意指什么?

  • 拨号连接 如果你运气好的话 )
  • 页数为文件 @ -_ text@ MS K1} 也许有些小图像 @ I,超链接
  • 用户点击并等待 @- 即时响应@'* t 预期
  • 服务器价格昂贵 大学和公司不是每个人都有

在这个世界上,瓶颈是 带宽@,@ not lantency_.}一个 50#KB 页花了几秒时间下载拨号@.。

HTTP/1.0 优化到 @:

  • 简单性 @ ( @ debuggable 可使用 Talnet@ MS K1调试
  • @(_servers do'}跟踪连接@)
  • Human -可读性(text协议MS K2
  • 1项请求*MSK01应答 *,}连接已关闭
GET /index.html HTTP/1.0
Host: example.com

HTTP/1.0 200 OK
Content-Type: text/html

<html>...

simple.Elegant.完美于 @1996.,除了文档检索@.以外,完全不能用于任何其它用途

压力打破它

然后网络变换了“. fast.”

@1998,}頁面是{'.}他們有樣式表{,} JavaScript} ,}多個影像}.}一個單頁可能需要各種資源MS K7}{

每一份请求都要求@: @

  1. TCP 握手 (1RT)
  2. 请求@/_# 第一字节 (~1RT)
  3. 收到答复
  4. 连接已关闭
  5. 重复每个图像@,}样式表 @ ,}脚本@ MS K2}

“20Q 资源”一页的意思是“20Q TCP handhakees @.Q ” 在“MS K3QMs Lantency connational ”上“(Z}仍然常见的@),,这“MSC6Qs 4Q 秒”。 握手 在任何内容被传输前@. @%

HTTP/1.0:的基本假设

时间是便宜的 @. @

在“1996, ” 中, “. Bandwidth ” 是“由 @1999,带宽改善而形成的瓶颈”。 长期性是't @- 突然间,这些往返旅行又重要了#.

HTTP/1.0 是为文档设计的 < .> 网络已变成一个应用平台\ . 某种东西必须给@.}

HTTP /1.1:+W#'全补丁

制造它的世界

HTTP=MSKK0}当网络爆炸时,HTTP@1997,就抵达了 @MSK 1 网络繁荣开始启动每个企业都需要一个网站}#. 网页正在变得复杂

压力是清晰的 @- @ per@ -_ 请求是杀死性能但完全重新设计 HTTP 是一个选项 @'}% 2# # 太多的基础设施已经依赖它@ ._ 解决方案必须是向后 @ MS K4\ complete=. @ *

改变什么了 @: @ @

  • 长期连接 (Connection: keep-alive 重新使用 TCP 连接
  • 显示的传输编码 @(_River 响应, 不知道大小前端@)_Q#
  • 东道主信头 @(_jirtual 主机@-}每个IPQ,}多个站点对共享主机来说至关重要
  • 缓存语义 (Cache-Control, ETag有条件的请求 )
  • 管道 @(_sess 发送多项请求,

是什么改变了什么?

  • 仍依次回应 @(_甚至用管线@)}#
  • 文本页眉 @ ( @ repeated a every request_) @
  • 每次连接时仍一个答复
GET /page.html HTTP/1.1
Host: example.com
Connection: keep-alive

HTTP/1.1 200 OK
Transfer-Encoding: chunked
Cache-Control: max-age=3600

...

为何会继续工作

HTTPMSKO 有效解答性能问题{'它只是移到.}

管道是失败的 Spec 允许发送一个连接的多次请求@, @ but:

  • 反应必须回来 顺序顺序 @(_head@-_of#-}封锁线路=)
  • 一个反应迟缓 堵住了背后的一切
  • Buggy近似物
  • 大多数浏览器都完全禁用

所以浏览器欺骗了. 而不是修补协议 , 他们围绕它工作

  • 开放 6 每个主机的平行连接 (browser 限制 @)
  • 使用 域分隔 (static1.example.com, static2.example.com) 乘以连接
  • 精版工作表 组合图像
  • CSS/JS 捆绑 减少请求
  • CDNs 光盘 减少延迟时间

这是整个生态系统对HTTP+/1.1'的补偿 基本限制 .

HTTP/1.1 由作弊MS K1 缩放,而不是通过修补模型.

为何它生存至今

HTTP/1.1 工作 足够充分 十五年的.不是因为好 而是因为环境补偿了:

  • 宽带已抵达 @. @20#ms handhakees 而不是@200 @ms@MS K2}痛苦是可以忍受的 @MSC3}
  • 摩尔・' 法律帮助 . 服务器可以处理每个浏览器的六个连接, 由 @ 2005. @%
  • CDN 掩盖问题@. @% 远端服务器 @ 20 @ ms away
  • 桌面控制@. @% 线性连接, 低延迟 , 可靠网络MS K2

协议还是被打破了 我们只是幸运的是 世界在隐藏它

实际成本

每个主机的六个连接是 @'_t free}:

  • 每个连接意味着另一个TCP握手
  • 每个连接都竞争带宽
  • 服务器必须维持更多同时连接
  • 标题@ -_ of @ MS K1 @ 线阻塞刚刚移到 TCP - 丢失一个连接的包@, 连接摊位

HTTP/1.1时代的网络速度加快了,但并非因为HTTP□.}而不是由于HTppMSSK2}它的速度更快是因为@:

  • 网络速度加快
  • Caching变聪明了
  • 吸收的中继延迟时间
  • 浏览器在平行操作方面变得更好

我们当时在文件检索协议上建立了一个应用平台 程序正在丢失

无人承认的令人不适的真相

@2010,@ web spect was a always battle against 反对HTTP本身的网络表现=.

当今时代的"最佳实践 " 讲述这个故事

  • 将全部 JavaScript 集中成一个文件
  • 将所有您的图像拼在一起
  • 内联关键通信支助系统
  • 使用数据 URI 来避免请求
  • 无法打开更多连接的域块
  • 将脚本放在页面底部

其中每一个都是为 @"#HTTP@/1.1}(可以有效处理许多请求) 有效的."

我建造了许多这些小工具, 比如斯普莱特发电机@,CSS压缩机 @,我们开始使用响应压缩等 asQZ...

由于 HTTP 改进了@.}浏览器速度更快,它们之所以快是因为 围绕HTTP工作.

每个主机有6个连接不是特性@. @ it'_%s 黑客(域块分割并非最佳做法) @.#ItMS K4}*接纳失败<.> *

我花了几年时间教开发者如何捆绑资产,sprite image ,和内线关键资源". 这没有一个是"}好的建筑_."它 规程损害控制.

@"_HTTP 很简单@"#神话,

  • 浏览器连接管理
  • CDN 边缘逻辑
  • 构建工具连接
  • 服务器连接连接集合

HTTP/1.1}因为一切都有效 周围 它加班工作来补偿.

如果您见过 HTTP 的图表, 该图是否显示 lantency\ 't 显示 Latentency", 丢失\ , 或失败模式@, it'} 它在欺骗您吗?. 协议很简单: @. 现实是#'\ tMS K9

HTTP/2:}我们修好了错误的图层

制造它的世界

网络又变换了两次大规模转变改变了一切。

@1. 動作發生了 @. iPhone 由 @2012,移动网络流量在@. 突然用户在#-的有线宽带@MS K4 他们当时在 @3G,}然后是{4G□,, 且具有可变延迟度和频繁丢失包MSQ9。 HTTPMS K10可以容忍的假设打破了.

网络应用程序取代网页@. Gmail.Google MapsMPK1FacebookMS K2Twitter.这些带有链接的 't文档@.它们需要数十或数百个资源{, realMSKO7}时间更新_,和即时响应.每个主机的#MSK106个连接}<"黑客正在显示其年龄=.}

Google感受到了这种痛苦, 他们有大规模规模的“,”性能 ” “-'obsessed Engineers", 而证明 HTTP/1.1"的数据是

SPDY:谷歌'实验

校对:Soup

SPDY介绍什么 :

  • 二进制框架 而不是文本解析
  • 多交串流 对单个 TCP 连接
  • 标题压缩 (later 精炼为 HHPACK 用于 HTTP/2)
  • 服务器推 积极主动地交付资源
  • 串流优先排序 首先装载关键资源

Google在Chrome和他们自己的服务中部署SPDY@.,GmailZ, 谷歌搜索{,和YouTube都运行着SPDie}.。 结果令人信服:: 40-60% lantency

HTTP/2:的路径

SPDY 证明了这些概念起作用了 @.IETF注意到并使用spdy作为 HTTP/2.的起点。 最后 HTP/2spec {(2015)是'和SPDie MS K5头压缩完全相同

HTTP=/2}HTTP*.*#任务完成后, Google在“2016 ” 中将SPDY销毁。

HTTP/2 改变了#(}在SPDY}):BARBAR

  • 二进制框架 (not text @- 更有效率的解析@)
  • 多重驱动 “(” 多个请求“/” 在一条连接上断开的答覆“MS K2”
  • 标题压缩 @(_HAPACK#-}不再重复相同的标题@)
  • 服务器推 @(_send resources before clients ask {-}虽然事实证明这很难正确调和,
  • 每一来源单一连接 @(Q#没有连接爆炸@)
┌──────────────────────────────────────────┐
│           Single TCP Connection          │
├──────────────────────────────────────────┤
│ Stream 1: GET /page.html                 │
│ Stream 3: GET /style.css                 │
│ Stream 5: GET /app.js                    │
│ Stream 7: GET /logo.png                  │
│ (all interleaved, no ordering required)  │
└──────────────────────────────────────────┘

这是 HTTP/1.1 管线应为 @ . 流体是独立的@. 一个缓慢的响应 :\ ' t阻隔了其他{.#MSK4 信头被压缩}%. 协议最终和我们如何实际使用 web+.}

它为什么在正确的网络上工作?

HTTP/2是 用于宽带网络的完美在“2015,”中,当宽带在发达世界无处不在时,

有何改进?

  • 轻型载荷下的延迟时间@(one connection @,}请勿按要求握手*)
  • 更少连接@ ( @ nonless server subject *\ MS K1} 少一点 TCP 慢点@ MPK2_ start)}
  • 更好的带宽利用率 @ ( @ no 人工连接限制@)
  • 标题压缩 @ ( @ repeated headers like cookie 不再花费带宽@ MS K1 @
  • 不再需要连接@/ @spriming 需要 (}%many 小文件现在都很好 @)

对于与低包装损失连接的用户来说 , HTTP/2是一个真正的进步

压力打破它

但世界已经向前进了 手机是网络流量的绝大部分

移动网络有一个基本特性, 它具有宽带功能't: 软件包丢失是常见且无法预测的.

TCP担保TCP保证 在 - 发送订单. 如果包“47”丢失了 “,”套件 “MS K3”等待“47”被重新传送 即使属于完全独立的 HTTP}/2流 .

┌──────────────────────────────────────────┐
│              TCP Receive Buffer          │
├──────────────────────────────────────────┤
│ [pkt 45][pkt 46][  ?  ][pkt 48][pkt 49]  │
│                   ↑                       │
│         Waiting for packet 47             │
│                                          │
│ Stream 1 data: BLOCKED                   │
│ Stream 3 data: BLOCKED                   │
│ Stream 5 data: BLOCKED (has pkt 48-49)   │
│ Stream 7 data: BLOCKED                   │
└──────────────────────────────────────────┘

HTTP/2解了头@-of @-在应用层的阻塞线\ .之后, TCP又在运输层重新启用它+.

一个丢失的包摊位全部流@ . @ 在无线连接中 ,包损失是稀有的 .在移动网络上 ,丢失 WiFi,或嵌入链接?包装箱损失是恒定的. 而且因为 HTTPMS K6使用 单 @(# by design *% 1} 现在一个丢失的封包块 一切一切 而不是六个连接中的一个@. @%

HTTP/2 性能 @:

  • Wired,低损失超赞
  • Mobile,中度损失有时 更严重 HTTP/1.1
  • 高悬浮度=,}任何损失*:灾难*

讽刺的@: HTTP/2本意是修补网络上的多环问题 @- 就像手机让人无法忽略#. TCPMS K5保证在移动上比它取代的协议更糟糕一样

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}为什么?

最初的HTTP=/2}部署显示有真正的改善

  • 连接更少意味着初始卸载速度更快@( @TLS holdhake once @,}不是六倍)
  • 标题压缩减少间接费用
  • 对同一来源的资产来说,多重驱动作用很大

我为“1.1?”设计的所有这些工具 突然用 HTTP@/2,}(突然的捆绑)消失了, 是一个BAD的东西 “.HTP/2'}多路转换对于同一来源的资产来说是件好事。“MS K4 ” 但是它帮助了交叉“- 原始请求” (ZMSK6) 我们不得不在这个网站上建立新工具来包装这些“MSKO8” 网包,例如“MSC9’

但尾部延时服却说了一个不同的故事 . 中位 P99越来越差了

我看到了这个第一手的: 客户端在他们的CDN上启用 HTTPMS K1, 并观看了移动 PQ99 lantency 增加数 仪表板显示在桌面上有所改进 支持票来自移动用户 . 我们花了一周时间发现 HTTP/2'

当HTTP/2工作时,当一个软件包在最坏的瞬间滴落到移动连接上 ,所有东西都冻结了 .用户通知的冻结量超过他们注意到的快速中位数

根本问题:

HTTP/2 假设TCP足够好

对于宽带来说,它是. @,}对于移动机来说是' 当HTTP=/2}被标准化的时候 ,}手机已经赢得了.+W@'#d

HTTP /3: Fine,WeMS K2ll 向下堆叠移动

制造它的世界

证据确凿, TCP就是问题所在.

Google自“2012.”以来就一直在实验性地运行 Quick(QUIC) 。 他们拥有移动网络上的数据@. 丢失的 WiFi,和高端-latency connations @, HTTPMSSK6在不改变运输层的情况下无法固定

但是您可以只做 @"@fix TCP% ." @ it'}在操作系统内执行的操作核心 @MS K4 @ It'#烤入每一个路由{,}防火墙_,}和互联网上的中继箱<.}改变TCP意味着要等几十年才能整个网络基础设施升级=.}

所以谷歌做了一些大胆的事 他们在UDP上建了一个新的运输协议书.

QUIC: 取代 TCP {(MS K2 的《议定书》

QUIC @( 原创@"Quick UDP Internet connects", 现在只是QUIC{) 是一个跨越 UDP的运输协议,但提供 TCP}-}类似可靠性.}关键洞察力=:} 在用户空间中执行可靠性@,, 在那里您可以快速循环.

为何UDP是一个基金会?

UDP 刻意最小化@. @ 它为 IP 添加端口号, 为 I... @ 基本是 @ . @ 无手握 @ MPK4 @ 没有可靠性@ MS K5}没有命令@ OMK6 @ 容器无法按顺序运达\ , 重复=, @ 或完全不按%. @ UDP 不按'# t关紧Q.{ *

QUIC需要的正是Quick@.BARBAR_在 UDP,\QUIC 的基础上,

  • 无内核变化的部署 @- @ it@ ' @s 只是一座图书馆
  • 迅速变热 “- 铬不断更新船上新的QUIC版本”
  • 通过大多数防火墙 - UDP 端口 @443 通常工作
  • 实施其自身的交通堵塞控制 - @% 没有粘贴到 TCPQ'%s 算法

**QUIC的不同做法 @: **

@ @Concern @ @TCP @I @QUIC @MS K3}关注 TCP @ MSK2_QUIC@ #
可靠性单位 连接 MS K1 流 * *
握手 TCP +TLS 分开MS K2 并合(faster})
加密加密 @ 可選擇的 (TLS) 强制的 @MS K4設計@-in})Z
标题@ - @ of @ MS K1 @ line clock @ 所有数据屏蔽@ 仅受到影响的溪流|
连接身份 @ }IP IP I+}港口 连接 ID * *
执行 执行情况 @ _ Kernel @ MPK1# 用户空间@ @

此连接的 ID 特别智能@. @ tCP 通过IP 地址和端口@ .} 更改“ MS K2 @ switch Wifi 网络”\ , NAT 重新绑定@ I), 而此连接 QUIC 使用一个在网络变更中幸存的连接标识+.}

HTTP/3:的路径

就像SPDY导致HTP/2,Google'QUIC实验导致 HTTPMS K2IETF标准化的 QuIC在 @2021@(RCC\9000),和HTTP□/3Z(BRC _9114)只是居于QUC之上的 HTIP语义学,而不是 TCP

标准化的 QUIC 与 Google @' @%s 在一些细节上不同于原创的Googla@(}(密码握手被重新修改),}有些标题格式已经更改了),}但是核心架构 {-}串流在 UDP @MS K5}中独立恢复了损失

HTTP/3 (2022) 是在 QUIC}. It' 上的HTTP

HTTP/3}改变了什么 :

  • QUIC 对 UDP {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}(not TCP )
  • Stream- 损失程度恢复 @(one lost back only shalls its flank_)}一袋丢失的包只拖住它的小溪 #MSK 1#
  • 快速连接设置 @(0-RTT 可能恢复@)#
  • 默认加密 QUIC=) 内建的(TLS1.3
  • 连接移徙 @(survives IP 地址更改@)#
┌──────────────────────────────────────────┐
│              QUIC Connection             │
├──────────────────────────────────────────┤
│ Stream 1: [pkt][pkt][pkt] ← flowing      │
│ Stream 3: [pkt][ ? ][pkt] ← waiting      │
│ Stream 5: [pkt][pkt][pkt] ← flowing      │
│ Stream 7: [pkt][pkt]      ← flowing      │
│                                          │
│ Lost packet only affects Stream 3        │
└──────────────────────────────────────────┘

保持原样的是什么?

  • HTTP 语义学 _(GET, POST},标题 *,状态代码=)
  • 缓存逻辑
  • REST模式
  • 应用层的每件事物

HTTP/3 曾 ' t change HTppMS K2 它改变了HTTP如何生存到现实

为何QUIC事务@( @In detail_)#

QUIC实施TCP'*%s可靠性保证 每个溪流这是修复 HTTP /2'的关键洞察力

TCP' 承诺 : 每个字节都按顺序到达." QUIC='}预言: : 每个字节 " 在此串流中 已按顺序到达@." @%

这就是为什么 HTTPMSKK0}HTTP{MSKO在失去的網絡上崩溃的原因吗?

溪流独立

在 QUIC\ , 中,每个 HTTP 请求@/}回应对配方都拥有自己的流 *.*在逻辑上是独立的 _-}它们共享一个连接来提高效率,}但一流的包丢失 {'*t block others}.}

QUIC Connection
├── Stream 1: GET /index.html     [packets 1, 2, 3]
├── Stream 3: GET /style.css      [packets 4, 5]     ← packet 5 lost
├── Stream 5: GET /app.js         [packets 6, 7, 8]
└── Stream 7: GET /logo.png       [packets 9, 10]

Packet 5 is retransmitted. Only Stream 3 waits.
Streams 1, 5, 7 continue unaffected.

与 HTTP/2相比, 在 TCPMS K1中, 所有这些流都共享一个 TCP 字节序列@ . 丢掉一包\ , 一切等待 @ .

连接移民@: @%

TCP 通过“ 4-tuple:}源代码 IP,}来源端口@,}目的地 IP},}目的端口 @.}改变其中任何一条连接,且此连接已绝迹

Phone on WiFi → walks out of range → switches to cellular
TCP: Source IP changed. Connection dead. Full reconnect.
QUIC: Connection ID unchanged. Streams continue seamlessly.

这一点之所以重要,是因为移动用户 连续 ,}所有连接都死了 I. QUIC=,你甚至可能没有注意到.吗?

-=YTET -伊甸园字幕组=- 翻译:

传统 TCP @+TLS在发送数据前需要多次往返访问@:

  1. TCP SYN /SYN-ACK}/ACC NSK3RTMS K4
  2. TLS 握手 @ (1-2 @ RTT)@
  3. 发送您的 HTTP 请求

QUIC将交通和密码手电筒连接起来 .}第一个连接需要 @1RT.}但是对于带缓存证书的返回用户来说...",QUIC会提供\0-RTT:}立即发送数据与您的第一个包MS K6}

First visit:    Client ──[handshake]──> Server ──[response]──> Client (1 RTT)
Return visit:   Client ──[data]──────────────────[response]──> Client (0 RTT)

0-RTT具有安全涵义 @replay attacks is possible 所以它♪'}限於一流请求. 但对于大多数页面的负荷来说

首次加密@- @class collegal citizen_:

TCP 被设计为“ 1970 @s.}加密后通过 TLS@. ” 。 这意味着“: ”

  • TCP 信头是普通文本@( @% 任何人都可以看到端口号 @ ,} 序列序号 @)
  • 中继箱可以检查和修改 TCP 流量
  • 加密是可选的 @ , @ 通常在连接设置后谈判

QUIC 加密程序几乎从一开始就具备了所有内容@. @% 即使软件包号码是加密的\ .}(这只是为了隐私) {'}_BARBAR_它防止了骨质化问题,因为中继箱依赖于能够读取信头@MS K4}使协议无法进化=.}

TCP packet:   [IP header][TCP header (plaintext)][TLS encrypted payload]
QUIC packet:  [IP header][UDP header][QUIC header (mostly encrypted)][encrypted payload]

需要它的世界

HTTP/3 是为我们实际生活在 :的世界设计的

  • 移动M-超过半数的网络流量是移动的
  • 不可靠的网络“: WiFi, 蜂窝 , 拥挤的公共网络”
  • 全球用户全球用户: 与远端服务器的高延迟连接
  • 隐私权期望: 加密是强制性的@,不是可选的

HTTP+/1.0_30年后 假设可靠的有线连接@,_HTTP=/3}承认可靠性是例外{,}而不是规则.}

进度成本

HTTP/3是{'}#t freeMS K2#

  • 民进党经常被封锁 返回 HTTP=/2}需要的 @)
  • 更多 CPU QUIC='}%s userspace complace implementation \ (}%not in the cernel like TCP@,}虽然这个缺口随着内核绕道和优化的堆栈而缩小,但这一缺口正在缩小
  • 新建调试工具 (tcpdump 显示加密 UDP, 无法读取 HTTP})
  • 中中箱干扰 @(_some network mangle UDP 无法预料地拼命拼凑UDP@)

但对于移动的“-”第一个应用程序来说, “,”不可靠的网络“,”和“latency -”敏感服务“MS K4” HTTP%/3”是匹配网络实际行为的第一个版本“.”

所有版本的真经验

每个HTTP版本的修改都发生,因为 环境变化快于协议.

版本 @ Eraa @MS K2环境 @ 假设@ 为什么它打破#
HTTP/1.0 @ DialupMS K5文件{ Bandwidth是瓶颈} Pages 成为应用程序<,Lantency mattered_ ′
@ @Broadband@,#网络应用程序 @ #低延迟隐藏效率不高的隐蔽 # #手机随包裹丢失而抵达
@, @ #TCP足够可靠,
HTTP/3 MSSK3 MS K4 移动- 第一次,Global □ }没有东西是可靠的 ~ 仍然在部署...#

模式是明确的@: @%

  1. 议定书是为当前环境设计的
  2. 环境变化@(}比协议能够适应的快
  3. 工作周期累积@( @CDNs,}连接黑客 @,_Bringling}){
  4. 新议定书承认现实
  5. 重复重复

协议不断被推到网络的更近处 每一个当环境要求它时 似乎已经足够剥离的抽象信息

其他意见 @:

  • "+Nateless @"是一个谎言 我们告诉自己在晚上睡觉 每一场会议 cookie@,_auth signal}#,和缓存头目是州管理 we'+ve blocked onQ.}
  • 多数成绩优胜者来自 工作变通办法,要求所有协议限制的补偿@.
  • “" simple @"Q 东西一直在移动”“. HTTP/1.0 很简单”“. 然后我们需要持续连接@.}然后是多路连接=. 然后新的运输#. 每个复杂层解决了真正的问题.
  • 时间问题 HTTP=/2}如果它到达了 @2005., 手机已经改变了游戏@. 协议昨天正在解决_'s problem *.#

自 < 1.0 i> 以来, 已改变的是什么?

虽然三十年来协议不断演变 : *

请求仍失败@. @ 网络分区@.服务器崩溃 @. 超时发生 @MS K2 您的代码仍然需要重试逻辑.}

网络仍保留着 #.# @200OK @ok does@'}但并不意味着回复正确 . 连接关闭但不代表请求成功*'* %sK5 超时={'} 不表示服务器没有处理您的请求'}%s.}

剖腹产仍然提供老化的数据@. @% Cache-Control 是一个请求@,}不是命令 @.}代理完成他们想要的 .}CDN 无效

客户端仍然在重试“.” 用户点击按键@, @ nothing happened ,}再次单击.}现在您有两个请求代理主管事务_.}

开发者仍然误解了 一等能力 @. @% POST是野生西部 . 大多数API都搞错了

// This is still your problem, regardless of HTTP version
public async Task<Result> CreateOrderAsync(Order order)
{
    // What happens if this times out?
    // Did the server receive it?
    // Did it process it?
    // Will the client retry?
    // Will you create duplicate orders?
    
    // HTTP/3 doesn't save you here.
    // Idempotency keys do.
}

如果您不理解这些@ , @ HTTP# MSSK2 @ won' @ t保存您的@ MPK4}

其实我所学到的

在建立所有这些协议版本的网络应用程序后 @, @ here+'_%s what stuck@:#

协议不是你们的可靠性层

HTTP 提供您请求的“/” 响应语义@ . @ it doesnó'_ t保证发送@ I,}正确=%,}或确切地说\ -once procession . 那'你的工作=.}

@2._Lantency is the enemy #,}不是带宽#.*

多数性能问题为圆-trip contral,非吞吐捆绑}MS K2减少请求比压缩有效载荷更重要

“3. ”每个“"”最佳做法“MS K2”都有到期日“MSC3”

HTTP /1.1. @ it'}对HTTP @/2 @ @ (#打破了单一的-#连结收益 <). @ @{"_Bundule everything into 1 file*"}是福音MS K8}(现在通过 HTP/2}或 HTppZ/3}运输许多小模块

在真实网络上测量 .

当地主机的基准证明您在移动网络上的用户 #,#酒店 WiFi,}和饱和的咖啡店连接>.#Test there.

无聊的零件最重要

超时@.Retries.巡回断路器 @.Unitedgency.连接集合@MS K4}这些反光细节决定了您的系统是否在负载中工作.

结论结论

HTTP没有跑得更快 因为它变聪明了 . 由于我们终于承认 网络是问题所在.

每个版本的时间都是对的 :

  • HTTP/1.0 适合拨号文件检索
  • HTTP/1.1 宽带网络应用的完美之处
  • HTTP/2 用于低端的“-” 光线连接是完美的
  • HTTP/3 用于构建移动@-_First @,}不可靠的-网络现实

错误在于认为其中任何一个是永久解决方案@. @它们都是对特定环境压力的响应_.}当环境改变时#,{协议必须遵循.}

HTTP 版本不是消费者意义上的升级@.}它们为不同的故障分布提供最佳平衡=.

毕竟这些基本原理仍保留着

  • 请求失败
  • 网络谎言
  • 抓牢很困难
  • 相关性事项

协议进化了 . 问题已经消失了 他们刚刚移动了.

建立能幸存故障的系统@.在真实网络上的测试 @.明白每个HTTP版本都是由它的时代所塑造的一种权衡=%,不是一种过时的升级_.

HTTPMSK130年的HTTP. 和我们建立的网络 .Q, 再过十年...

继续阅读

Finding related posts...
logo

© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.