# HTTP Über die Dekaden ,: , Eine Geschichte der Physik , , , Latenz , und Grudging-Anpassung

<!--category-- HTTP, Networking, Web Development, Opinion -->
<datetime class="hidden">2025-12-28T18:00</datetime>

HTTP didn ,' ,t sich entwickeln , . , es war *Erzwungen* Um durch Physik zu ändern, ,-Latenz-, und Missbrauch

Jede Version existiert, weil die vorhergehende eine harte Einschränkung getroffen hat...... Wenn Sie diese Einschränkungen verstehen, dann verstehen Sie warum das Web so funktioniert wie es ist.. ..-... und warum so viele Best Practices...

I'®ve baut Web-Anwendungen, seit 1997.® IMSC2®ve debugged HTTP T/1.0® Connection Stürmen,® beobachtete Browser öffnen sechs Verbindungen pro Host als ein "-Feature"," verflucht bei HTTP/2's TCP-Head-of-"line Blockierung in Mobilfunknetzen," und endlich gesehen HTTP/3 zugeben, was wir wussten, die ganze Zeit ?:" das Netzwerk ist das Problem .

Dies ist ein Protokoll-Tutorial... Es ist die Geschichte, wie wir hierher gekommen sind.

[TOC]

## HTTP-Text über unzuverlässige Rohre ohne Stateless

### Die Welt, die sie erschaffen hat

HTTP./1.0 wurde in der Version 1 für eine Welt entwickelt, die es nicht mehr gibt, um zu verstehen, warum es funktioniert hat.

- **Dialup Verbindungen** wenn du Glück hattest
- **Seiten waren Dokumente** --Text - vielleicht ein paar kleine Bilder - Hyperlinks
- **Benutzer klickten und warteten** Die sofortige Reaktion wurde erwartet.
- **Server waren teuer** Nicht alle Universitäten und Unternehmen

In dieser Welt war der Engpass **Bandbreite**Eine Seite von 50KB dauerte Sekunden, um auf Dialup zu downloaden. ., die sich um einen zusätzlichen Handschlag kümmerte.

**Was für HTTP-/1.0 optimiert wurde**

- Einfachheit mit telnet ,) , debuggable
- Statelessness-Server von 't Gleisanschlüssen
- Human---Lesebarkeit Textprotokoll )-
- Eine Anfrage-,-eine Antwort-MSC1-Verbindung geschlossen

```
GET /index.html HTTP/1.0
Host: example.com

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

<html>...
```

Einfach, elegant, perfekt für 1996. und völlig unbrauchbar für alles jenseits der Dokumentenwiederherstellung

### Der Druck, der ihn brach

Dann änderte sich das Netz.

Sie hatten Stylesheets, ,, JavaScript, ,, mehrere Bilder, MSC5 Eine einzelne Seite könnte separate Ressourcen benötigen.

Jede einzelne Anforderung erforderlich

1. **TCP-Handshake** RTT-)
2. **Antrag auf Byte /** RTT-)
3. **Antwort eingegangen**
4. **Verbindung geschlossen**
5. Wiederholen Sie für jedes Bild...

Eine Seite mit Ressourcen, die bedeuteten, dass 20 TCP Handshakes auf einer Latenzverbindung von 200ms immer noch üblich ),, dass 's Sekunden von *Nur Handschütteln* bevor Inhalte übertragen werden

Die grundlegende Annahme von HTTP-/1.0:

> **Die Zeit war günstig.**

Die Bandbreite von . war der Engpass von .. **Latenzzeit:** - und plötzlich die runden Reisen zählte

Das Web war zu einer Anwendungsplattform geworden.

## HTTP-/1.1:-Wesen-'-ll Patch

### Die Welt, die sie erschaffen hat

HTTP-/1.1 , kam in 1997, , gerade als das Netz explodierte , . , Der dotcom Boom begann ,. , Jedes Unternehmen brauchte eine Website , . , Webseiten wurden immer komplexe Tabellen für Layout , , , JavaScript for interactivity ,, , Bilder überall

Der Druck war klar. **Verbindung --per---Request wurde töten Leistung**Aber die völlige Neugestaltung von HTTP war eine Option, '... Zu viel Infrastruktur hing bereits davon ab.MSKS3. Die Lösung musste rückwärts sein.MSKK4.compatible.....

**Was hat sich geändert?**

- **Persistente Verbindungen** (`Connection: keep-alive` Standardmäßig wird die TCP-Verbindung wiederverwendet.
- **Kodierung der Datenübertragungen** (-Stream-Antworten ohne zu wissen, Größe im Voraus
- **Host-Header** Virtuelles Hosting für mehrere Standorte pro IP-Adresse, entscheidend für das gemeinsame Hosting
- **Caching Semantik** (`Cache-Control`, `ETag`Bedingte Anfragen
- **Pipelinearbeiten** Mehrere Anfragen senden, ohne auf Antworten zu warten.

**Was hat sich verändert?**

- Immer noch sequentielle Antworten, sogar mit Pipelineing.
- Immer noch Text-Header auf jeder Anfrage wiederholt
- Immer noch eine Antwort zu einem Zeitpunkt pro Verbindung

```
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

...
```

### Warum es sortieren -

HTTP./1.1? didn-'?t tatsächlich das Leistungsproblem lösen.? Es hat es nur herum bewegt.

**Pipelining war ein Fehler.** Die Spec erlaubt das Senden mehrerer Anfragen auf einer Verbindung.

- Die Reaktionen mussten zurück kommen *in der Reihenfolge* (-Kopf---von---line Blockierung
- Eine langsame Reaktion blockiert alles dahinter
- Buggy-Proxies manipulierte pipelineierte Anfragen
- Die meisten Browser deaktiviert es vollständig

So Browser betrügen, .... Statt das Protokoll zu fixieren, arbeiteten sie um es herum.

- Öffnen **Parallele Verbindungen pro Host** Höchstgrenze für (-Browser
- Verwendung **Bereichsscherben** (`static1.example.com`, `static2.example.com`Um Verbindungen zu multiplizieren
- **Spriteblätter** Bilder zu kombinieren
- **CSS./.JS bündeln** zur Verringerung der Anträge
- **CDNs** zur Verringerung der Latenz

Nichts davon war das Protokoll, das wie entwickelt funktionierte, es wurde das gesamte Ökosystem kompensiert für die grundlegende Einschränkung von HTTP-/1.1'

> **Nicht durch Fixieren des Modells, sondern durch Betrügen.**

### Warum es überhaupt überlebte

HTTP-/1.1-gewirkt *gut genug* nicht weil es gut war, sondern weil die Umgebung kompensiert wurde.

- **Breitband angekommen** Der Schmerz war tolerierbar.
- **Moore-'-Gesetz half** Server können mit sechs Verbindungen pro Browser umgehen.
- **CDNs maskiert das Problem** Edge-Server entfernt statt 200,ms,.,
- **Desktop dominiert** Verdrahtete Verbindungen Niedrige Latenzzeiten Zuverlässige Netzwerke

Das Protokoll war immer noch gebrochen, .... Wir hatten einfach nur Glück, dass die Welt es versteckte.

### Die realen Kosten

Diese sechs Verbindungen pro Host waren

- Jede Verbindung bedeutete einen weiteren TCP-Handshake
- Jede Verbindung konkurrierte um Bandbreite
- Server mussten mehr gleichzeitige Verbindungen unterhalten
- **Head---of---line Blockierung gerade auf TCP verschoben** Verlieren Sie ein Paket auf einer Verbindung, dass die Verbindung stoppt

Das Web wurde schneller in der HTTP-Epoche, aber nicht wegen HTTP-Es wurde schneller, weil -:

- Netzwerke wurden schneller
- Caching wurde klüger
- CDNs absorbierte Latenz
- Browser wurden besser bei Parallelität

Wir bauten eine Applikationsplattform auf einem Dokumenten-Retrieval-Protokoll.Das Protokoll verlor die .. Wir haben gerade nicht das Gefühl, es noch zu fühlen.

## Die unbequeme Wahrheit, die niemand zugibt

Durch die Web-Performance war ein ständiger Kampf gegen HTTP selbst.

Die besten Praktiken der Ära erzählen die Geschichte

- Konkatieren Sie Ihr gesamtes JavaScript in einer Datei
- Sprite alle Ihre Bilder zusammen
- Inline-kritische CSS
- URIs verwenden, um Anfragen zu vermeiden
- Domain shard öffnet weitere Verbindungen
- Skripte am unteren Rand der Seite setzen

Jeder einzelne von diesen ist ein Workaround für ".HTTP1.'.t kann viele Anfragen effizient handhaben

Ich baute viele dieser kleinen Werkzeuge wie Sprite-Generatoren... CSS Kompressoren... wir begannen mit Response-Kompression...

Browser waren .' .t schneller, weil HTTP verbessert ?. . Sie waren schneller, da sie **um HTTP herum gearbeitet**.

Sechs Verbindungen pro Host ist nicht ein feature...It...'.s ein Hack-..s Domain Sharding ist keine beste Praxis, sondern eine Aufnahme von Fehlern.

Ich verbrachte Jahre damit, Entwicklern zu lehren, Vermögenswerte zu bündeln.,-Sprite images.,- und inline-kritische Ressourcen. **Protokoll-Schädenkontrolle**.

Der Mythos von " ist einfach, weil die Komplexität versteckt war.

- Verwaltung der Browserverbindung
- CDN-Kantenlogik
- Werkzeugverkettung erstellen
- Pooling der Serververbindung

HTTP-/1.1 , weil alles funktionierte *rundherum* es arbeitete Überstunden, um zu kompensieren

Wenn du jemals ein Diagramm von HTTP gesehen hast, das nicht Latenz zeigt, , Verlust oder Ausfall Modi, es lügt ' Sie anlügen Das Protokoll ist einfach . Die Realität ist MSC9

## Wir haben die falsche Ebene behoben

### Die Welt, die sie erschaffen hat

Durch das Netz hatte sich wieder transformiert. Zwei massive Verschiebungen veränderten alles.

**Mobile passierte**
Das iPhone gestartet in -2007.... durch mobile Web-Verkehr wurde explodieren -. , Plötzlich Benutzer waren auf kabelgebundenen Breitband- , - , sie waren auf 3 , G ,, , dann .4 ,G , , mit variabler Latenz und häufigen Paketverlust , die Annahmen, dass HTTP gemacht , , /1.1 , tolerierbar wurden brechen , um . ,

**Web-Anwendungen ersetzten Webseiten**
Google Maps , . Facebook ,. , Twitter , . , diese waren ,' , t Dokumente mit Links , . , Sie waren Anwendungen, die Dutzende oder Hunderte von Ressourcen benötigt , wirklich , und Zeit-Updates , E, , Instant Response , T. , die 6 Verbindungen pro Host ." hack zeigte sein Alter ,

Google spürte diesen Schmerz akut, und die Daten zu beweisen, dass HTTP-/1.1 war der Engpass in 2009,. Sie begannen SPDY-MSC7.

### SPDY-:- Google-'-Experiment

SPDY ( Ausgesprochen " Schnell") Aus war Google-' Aus Antwort auf HTTP-/1.1' Aus Einschränkungen . Aus Es war ein Standardaufwand ' Aus diesem Grund war es Google Versandcode und sehen, was funktionierte . Aus

**Was SPDY eingeführt hat**

- **Binäre Rahmung** statt Textparsing
- **Multiplex-Ströme** über eine einzelne TCP-Verbindung
- **Kopfstützenkompression** (, der später für HTTP-/2) zu HPACK veredelt wurde
- **Server push** für proaktive Ressourcenbereitstellung
- **Die Prioritätensetzung straffen** kritische Ressourcen zuerst laden

Google stellte SPDY über Chrome und ihre eigenen Dienste zur Verfügung Von Google Google-Suche , und YouTube waren alle laufenden SPPDY , . Die Ergebnisse waren überzeugend ,: , 40-60% , Latenzreduktion in einigen Fällen

**Der Pfad zu HTTP-/2:**

SPDY bewies, dass die Konzepte funktionierten.Das IETF nahm Notiz und benutzte SPPDY als Ausgangspunkt für HTTP-Versionen. Das endgültige HTTP-Protokoll ist T(2015), identisch mit der Headerkompression von SPDy.- wurde deutlich verändert.

Google deprecated SPDY in U2016 , sobald HTTP , /2 , hatte genügend Annahme , . , Mission durchgeführt , sie ,' , zwang das Web nach vorne durch die Lieferung zuerst und standardisieren später

**Was HTTP- -/2- änderte das Gebäude auf SPDY-):-**

- **Binäre Rahmung** Effizienteres Parsieren
- **Multiplexing** Mehrfache Anfragen/Antworten interleaved auf einer Verbindung
- **Kopfstützenkompression** Nicht mehr die gleichen Kopfzeilen wiederholen
- **Server push** Ressourcen aussenden, bevor der Client fragt: - obwohl dies sich als schwierig erwiesen hat, richtig zu stimmen und jetzt weitgehend veraltet ist: )
- **Einmalige Verbindung nach Herkunft** Keine Verbindungsexplosion mehr

```
┌──────────────────────────────────────────┐
│           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)  │
└──────────────────────────────────────────┘
```

Dies ist, was HTTP-/1.1-Pipelinierung sollte gewesen sein ..-Streams sind unabhängig ?.-Eine langsame Antwort nicht blockiert andere ..-Header werden komprimiert . .-Das Protokoll schließlich abgestimmt, wie wir tatsächlich verwenden das web .

### Warum es funktionierte, auf den rechten Netzwerken

HTTP-/2 war **perfekt für das Breitbandnetz**Und in 2015, als es standardisiert wurde, war der Breitbandbereich in der entwickelten Welt allgegenwärtig.

**Was verbessert?**

- Latency unter Lichtlast (-one connection - kein Handschlag über Kopf pro Anfrage )-
- Weniger Verbindungen ohne Server Overhead, weniger TCP langsam- starten)
- Bessere Bandbreitenauslastung Keine künstlichen Verbindungsgrenzen
- Header-Kompression Mehrsprachige Header wie Cookies kosten keine Bandbreite mehr
- Keine Verkettung mehr erforderlich /‘spriting -('Viele kleine Dateien sind jetzt in Ordnung.

Für Benutzer auf kabelgebundenen Verbindungen mit geringem Paketverlust war dies eine echte Verbesserung. Die Benchmarks sahen großartig aus.

### Der Druck, der ihn brach

Aber die Welt hatte sich schon auf bewegt. **Mobile war jetzt die Mehrheit des Web-Verkehrs**

Und Mobilfunknetze haben eine grundlegende Eigenschaft, dass Breitband doesns-'-t-:- **Paketverlust ist häufig und unvorhersehbar**.

TCP-Garantien **Lieferung nach Belieben**Wenn das Paket 47 verloren geht, warten Sie die Pakete "MSC3" bis das Paket erneut übertragen wird, auch wenn es zu völlig unabhängigen HTTP-Streams gehört.

```
┌──────────────────────────────────────────┐
│              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, gelöste Kopfbedeckung von -, die an der Applikationsschicht blockiert wurde, ., dann führte TCP sie auf der Transportschicht wieder ein.

**Ein verlorenes Paket stoppt alle Streams** Bei einer sauberen kabelgebundenen Verbindung ist der Paketverlust selten...... auf mobilen Netzwerken....... verlustreiches WiFi.... oder überlastete Links.... *Einzeln* Verbindung (-by design - ein verlorenes Paket blockiert jetzt *alles* statt nur einer von sechs Verbindungen

Leistung von HTTP-/2, :

- **Geringer Verlust**Ausgezeichnet
- **Mobile, mittelschwerer Verlust**Manchmal *Schlimmer* als HTTP-/1.1
- **Hohe Latenz-Verluste**]:-Katastrophen

Die Ironie: :, HTTP, /2, sollte das Multiplexing-Problem des Webs beheben.-, genauso wie der Verlust von Mobiltelefonen es unmöglich machte, die Garantien von . und TCP zu ignorieren, machte es auf dem Handy schlimmer als das Protokoll, das es ersetzte.

### Warum HTTP-/2, sich schneller fühlte, bis es geschah

Erste HTTP-Bereitstellungen zeigten echte Verbesserungen.

- Weniger Verbindungen bedeuteten eine schnellere Anfangslast.(.TLS-Handshake einmal.,. nicht sechsmal.MSC2.
- Kopfverdichtung reduzierter Overhead
- Multiplexing funktionierte sehr gut für Vermögenswerte mit dem gleichen Ursprung

Alle diese Werkzeuge, die ich für -1.1? , Das alles ging weg mit HTTP ,/2, , plötzlich Bündelung war ein BAD Ding , . , HTTP ./2' , Multiplexing war ideal für Vermögenswerte auf dem gleichen Ursprung , aber es tat , cross , ' , nicht Hilfe , um kreuz , - , Originalanfragen , wir mussten neue Tools bauen, um diese zu bündeln ( , Webpack auf dieser Website zum Beispiel ,!). ,

Aber die Schwanzlatenz erzählte eine andere Geschichte *Median* wurde besser... die P.M.S.K.1 wurde schlechter...

Ich sah dieses aus erster Hand ,: , ein Client aktiviert HTTP , /2 , über ihre CDN und beobachtete mobile P .99 , Latenz *Zunahme* Die Dashboards zeigten Verbesserung auf dem Desktop.Die Support-Tickets kamen von mobilen Benutzern.Wir verbrachten eine Woche damit, herauszufinden, dass HTTP./2's Verbesserungen von " die Dinge für den Großteil ihres Traffic noch schlimmer machten.

Wenn HTTP-/2-Funktion funktioniert, funktioniert es wunderbar..... wenn ein Paket im schlimmsten Moment auf eine mobile Verbindung fällt....... alles gefriert.... und Benutzer bemerken, dass mehr friert, als sie schnelle Medianwerte bemerken....

Das grundlegende Problem

> **HTTP./2, angenommen TCP war gut genug**

Für den Breitbandbereich war es ., für mobile ,, es war ',t., Und bis HTTP-/2, wurde standardisiert ,, mobile bereits gewinnend ., Wir waren ', geschoben so weit TCP uns nehmen konnte .,

## HTTP-/3:-Feinbilden,-Wesen '-ll bewegen Sie den Stapel nach unten

### Die Welt, die sie erschaffen hat

Durch die Beweisaufnahme war der Beweis eindeutig. **TCP war das Problem**.

Google hatte QUIC experimentell seit laufend Sie hatten die Daten... auf mobilen Netzwerken... verlustreiches WLAN... .., und hohe --Latenzverbindungen... ? . .-, - HTTP -/2 - über TCP versagte in einer Weise, dass ' nicht fixiert werden konnte, ohne die Transportschicht zu ändern.

Aber du kannst '-t einfach nur "-Fix TCP-."-It-' in Betriebssystemkerne implementiert , .-Its in jeden Router gebacken ,-Firewall und Middlebox im Internet ,. , TCP zu ändern bedeutet Jahrzehnte warten auf die gesamte Internet-Infrastruktur upgraden

So Google tat etwas waghalsiges **sie bauten ein neues Transportprotokoll auf UDP**.

### Das Protokoll, das TCP ersetzt hat

QUIC - Originally Translated from English (Englisch) Quick UDP-Internetverbindungen QUICAD) ist ein Transportprotokoll, das zwar über UDP läuft, aber TCP --ähnliche Zuverlässigkeit bietet. **Implementieren Sie die Zuverlässigkeit im Userspace-Bereich, wo Sie schnell iterate**.

**Warum UDP als Stiftung?**

UDP ist bewusst minimal ,. , Es fügt Port-Nummern zu IP und ,... , dass ,mesK2 , im Grunde it .. , Keine Handshakes ,, , keine Zuverlässigkeit , , , kein Auftrag , . , Packets könnte außerhalb der Reihenfolge ankommen ,musk7 , duplikat , oder gar nicht ,. , UDP doesns , ' , nicht kümmern .

Das ist genau das, was QUIC brauchte.

- **Bereitstellen ohne Kernel-Änderungen** Es ist nur eine Bibliothek
- **Schnell auflösen** Chrome aktualisiert Schiff neue QUIC-Versionen ständig
- **Durch die meisten Firewalls gehen** UDP-Port funktioniert in der Regel
- **Einführung einer eigenen Stauregelung** Nicht mit TCP-Algorithmen stecken

**Was QUIC anders macht**

TCP-Qualifikationen (Quic)
|---------|-----|------|
| **Zuverlässigkeitseinheit** Verbindung mit dem |, Stream
| **Handschlag** TCP TCP +, TLS getrennt, kombiniert, (, faster, ), |
| **Verschlüsselung** Weitere Informationen: http:europa.eu.int/en/comm/index_de.htm
| **Kopf---von---Linienblockierung** Alle Daten wurden blockiert. Nur betroffener Stream.
| **Verbindungskennung** IP-Anschluss-Anschluss ID-Verbindungsnummer von |
| **Durchführung** KERNEL |-Benutzerraum

Die Verbindungs-ID ist besonders clever.. , TCP identifiziert Verbindungen durch IP-Adresse und Port ,. , entweder ändern , ( switch WiFi-Netzwerke , , , NAT rebinding , und die Verbindung dies ,. QUIC verwendet eine Verbindung ID, die Netzwerkänderungen überlebt

**Der Pfad zu HTTP-/3:**

Genau wie SPDY dazu führte, dass das QUIC-Experiment von HTTP-' das standardisierte quIC von IETF in -MSC3 und HTTP-M9000), war, ist es einfach HTTP Semantik über QUC anstelle von TCP-..

Das standardisierte QUIC unterscheidet sich in einigen Details vom Google-Original von (.Der Kryptohandshake wurde überarbeitet.,. Einige Headerformate veränderten sich, aber die Kernarchitektur blieb übrig.

HTTP./3. ist HTTP über QUIC-.. Es ist die Aufnahme, die wir brauchten, um unter HTTP zu gehen, um HTTP zu beheben.

**Was HTTP-/3 änderte**

- **QUIC über UDP** Nicht TCP, nicht TCP
- **Verlustrückgewinnung auf der Ebene von Stream--** Ein verlorenes Paket stoppt nur seinen Stream
- **Schnellerer Verbindungsaufbau** (0-,RTT-Wiederaufnahme möglich
- **Verschlüsselung standardmäßig** ,( , TLS , 1.3 , gebaut in QUIC , ) ,
- **Migration von Verbindungen** Überwacht IP-Adressenänderungen)

```
┌──────────────────────────────────────────┐
│              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        │
└──────────────────────────────────────────┘
```

**Was blieb das gleiche?**

- HTTP-Semantik Statuscodes
- Caching-Logik
- REST-Muster
- Alles auf der Applikationsschicht

> **Es änderte sich, wie HTTP die Realität überlebt**

### Warum QUIC-Materien im Detail

QUIC implementiert TCP-Verlässlichkeit garantiert *pro Stream*Dies ist die wichtigste Einsicht, die HTTP Behebt /2's fatale Fehler

**TCP-Versprechen** Jedes Byte kommt in Ordnung.
**QUIC-'-Versprechen** Jedes Byte *in diesem Stream* kommt in der Reihenfolge an

Diese Unterscheidung ist, warum HTTP./3... nicht auf verlustigen Netzwerken zusammenbricht... lass mich auspacken, wie das tatsächlich funktioniert.

**Strömungsunabhängigkeit**

In QUIC.,, jeder HTTP-Anforderung, wird /, Response-Paar seinen eigenen Stream erhalten ., Streams sind logisch unabhängig, sie teilen eine Verbindung für Effizienz, ,, aber Paketverlust auf einem Stream blockiert andere .,

```
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.
```

Vergleichen Sie dies mit HTTP-/2 over TCP-:.Alle diese Streams teilen eine TCP Byte Sequenz... Verlieren Sie ein Paket.

**Verbindungs-Migration - :**

TCP identifiziert Verbindungen über einen -4- tuple .: source IP ,, source port , , ziel IP ., zielport , und die Verbindung ist tot , . .

```
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.
```

Dies ist wichtig, weil mobile Nutzer *ständig* switch networks Aus deinem Haus herausgehen – ,Aus dem WiFi verlieren ,Aus dem zellularen Wechsel .Aus dem TCP-System wird jede Verbindung ablaufen..Mit QUIC-System können Sie es nicht einmal bemerken.

**Wiederaufnahme von 0-,RTT**

Traditionelles TCP-Verfahren TLS erfordert mehrere Rundfahrten vor dem Senden von Daten

1. TCP SYN-MS-K0-SYN---ACK, /-ACK RTT-)-ACK
2. TLS Handshake RTT-)
3. Schließlich schicken Sie Ihre HTTP-Anfrage

QUIC kombiniert den Transport und Krypto-Handshakes..-Erste Verbindung dauert 1-RTT-.-Aber für die Rückkehr von Benutzern mit zwischengespeicherten Anmeldeinformationen.,-QUIC Angebote senden Sie Daten sofort mit Ihrem ersten Paket.

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

0--RTT hat Sicherheitsimplikationen (-Replay-Angriffe sind möglich ),, so dass es ' begrenzt auf idempotent Anfragen . Aber für die meisten Seiten Lasten , ist es eine signifikante Latenz gewinnen .

**Verschlüsselung als erster Bürger der --Klasse**

TCP wurde in der 1970-Verschlüsselung entwickelt.Die Verschlüsselung wurde später über TLS-Verschraubung verschraubt.

- TCP-Header sind Klartext, in dem Portnummern angezeigt werden können.
- Middleboxen können den TCP-Verkehr überprüfen und ändern
- Verschlüsselung ist optional, oft nach dem Verbindungsaufbau verhandelt

QUIC verschlüsselt fast alles von Anfang an – auch die Paketnummern sind verschlüsselt – . Das ist gerade wegen der Privatsphäre: '. Es verhindert das Ossifikationsproblem, bei dem Middleboxen darauf angewiesen sind, Header lesen zu können.,. Das macht die Protokollentwicklung unmöglich.

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

### Die Welt, die sie braucht

HTTP./3 ist für die Welt konzipiert, in der wir leben

- **Mobile®--erste**Mehr als die Hälfte des Web-Verkehrs ist mobil
- **Unzuverlässige Netze**Überlastete öffentliche Netze
- **Globale Nutzer**Hohe Latenzverbindungen zu entfernten Servern
- **Datenschutzerwartungen**Die Verschlüsselung ist obligatorisch, nicht optional.

Das Protokoll stimmt schließlich mit der Netzwerkrealität überein.Dreißig Jahre nach HTTP./1.0... angenommen, dass zuverlässige kabelgebundene Verbindungen... HTTP.../3... erkennen an, dass Zuverlässigkeit die Ausnahme ist...

### Die Kosten des Fortschritts

HTTP-/3 ist kostenlos

- **UDP wird oft blockiert** durch Firmen-Firewalls .( .fallback to HTTP . /2 . benötigt .
- **Mehr CPU** für die Benutzerraum-Implementierung von QUIC-'® nicht im Kernel wie TCP-MSC2® obwohl diese Lücke mit Kernel Bypass und optimierten Stacks geschlossen wird.
- **Neue Debugging-Tools** (-tcpdump zeigt verschlüsselte UDP-,-nicht lesbare HTTP-)-
- **Interferenz zwischen Zwischenbehältern** UDP unvorhersehbar manövrieren

Aber für mobile, erste Anwendungen – , – unzuverlässige Netzwerke – und Latenzzeiten –-sensitive Services – ist die erste Version, die mit dem Verhalten von Netzwerken übereinstimmt.

## Die wahre Lektion über alle Versionen hinweg

Jede HTTP Versionsänderung ist passiert, weil **die Umgebung hat sich schneller verändert als das Protokoll**.

|-Version Version |-Ära Umgebung |-Assumption Warum es gebrochen |-Environment
|---------|-----|-------------|------------|--------------|
HTTP-Dokumente |-Breite ist der Engpass Seiten wurden Apps MS K8-Latenz wichtig
|-HTTP-/1.1-|-M1999-2015-MSSK4-Breitband-,-Web-Apps Niedrige Latenz verbirgt Ineffizienz |-Mobil angekommen mit Paketverlust
|- HTTP-/2-T|-TM2015-2022-TM|-TM-TMB-maxime ,-TML-TMC ist zuverlässig genug |-TMTCP ist dominant geworden ,-TM TCP fehlgeschlagen
|-HTTP-/3-|-M2022+-MUSK4-Mobile-MWSK5-erstens ,-global Nicht sicher, dass noch immer ...-MKSK10 zur Verfügung steht

Das Muster ist klar.

1. Protokoll ist für die aktuelle Umwelt konzipiert
2. Umgebungsänderungen schneller als Protokolle sich anpassen können
3. Workarounds akkumulieren (-CDN-Verbindungshacks
4. Neues Protokoll erkennt Realität an
5. Wiederholen

Das Protokoll wird immer näher an das Netzwerk geschoben.Jede Abstraktion, die ausreichend schien, wurde zurückgeschält, als die Umgebung es verlangte.

**Sonstige Beobachtungen**

- " ist eine Lüge, die wir uns sagen, dass wir nachts schlafen sollten..Jedes Session-Cookie..., ist ein Token von , und der Cache-Header ist staatliche Verwaltung, die auf . geschraubt wurde.
- Die meisten Leistungsgewinne kamen von *Abhilfemaßnahmen*Nicht Protokollreinheit, nicht Protokollreinheiten, nicht ., CDNs, ,, Caching-Proxies, MSC3, Verbindungspooling, MCSK4, Request Coalescing, alle Kompensierung für Protokollbeschränkungen, MSV6,
- Das Simple "-Ding bewegte sich weiter..-HTTP-/1.0- war einfach, dann brauchten wir persistente Verbindungen, dann Multiplexing .-Dann neuer Transport... jede Schicht der Komplexität löste echte Probleme.
- **Zeitliche Aspekte** Das Protokoll löste gestern das Problem von '.

## Was hat sich seitdem verändert?

Hier ist der unbequeme Teil, trotz dreißig Jahren der Protokollentwicklung.

**Anfragen scheitern immer noch.**
Netzwerk-Partition: . , Server Absturz:. , Timeouts passieren , . , Ihr Code braucht immer noch die Logik wiederholen ,. ,

**Netzwerke liegen immer noch vor**
Die Antwort ist korrekt.Die Verbindung geschlossen bedeutet, dass die Anfrage nicht erfolgreich war.

**Caches immer noch dienen veraltete Daten**
`Cache-Control` ist eine Anfrage, nicht ein Befehl, sondern ein Proxies tun, was sie wollen.

**Mandanten wiederholen immer noch schlecht...**
Benutzer-Klicks-Taste, ,, nichts passiert, wieder ,, klickt jetzt haben Sie zwei Anfragen, die .., Idempotenz Angelegenheiten .

**Entwickler immer noch missverstehen idempotency**
GET sollte sicher sein – .-PUT sollte idempotent sein – . – POST ist der wilde Westen – . – Die meisten APIs bekommen dieses falsche Ergebnis

```csharp
// 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.
}
```

> **Wenn du nicht verstehst, dass diese...**

## Was ich eigentlich gelernt habe

Nach dem Bau von Web-Anwendungen über alle diese Protokollversionen

**Das Protokoll ist nicht Ihre Zuverlässigkeitsschicht.**

HTTP gibt Ihnen Anfrage ,/ , Response Semantik , . , es nicht garantiert Lieferung , , , Korrektheit , oder genau ,- ,once Verarbeitung , dass , ' , Ihre Arbeit ,

**Die Latenz ist der Feind, nicht die Bandbreite.**

Die meisten Leistungsprobleme sind runde --Streifen gebunden ,-nicht Durchsatz gebunden.-Reduzierung Anforderungen zählt mehr als die Komprimierung von Nutzlasten

**Jede bewährte Praxis hat ein Verfallsdatum.**

Domain-Schärfung war für HTTP notwendig.' ist aktiv schädlich für HTTP, /2 ist das Breaks der Single--Verbindung Vorteil ,). ist , um alles in eine Datei zu bringen , " war Gospel , und jetzt verschiffen viele kleine Module über HTTP, MSC9 oder HTTP ist oft besser als . Die Taktik ändert sich , MSC12 Das Ziel ,( Reduce Latenz , bleibt die gleiche . ,

**Maßnahme auf realen Netzen**

Benchmarks auf localhost beweisen nichts... Ihre Nutzer sind in mobilen Netzwerken... Hotel WLAN... und gesättigte Coffeeshop-Verbindungen...

**Die langweiligen Teile sind am meisten von Bedeutung**

Timeouts, .-Retries, .-Leistungsschalter, Idempotenz, .-Verbindungspooling Diese unglamourösen Details bestimmen, ob Ihr System unter Last arbeitet.

## Schlußfolgerung

HTTP didn-'-t schneller zu bekommen, weil es klüger wurde, .-t es wurde schneller, weil wir endlich zugelassen **das Netz war das Problem**.

Jede Version war für seine Zeit richtig.

- **HTTP-/1.0** war perfekt für das Auswählen von Dokumenten
- **HTTP-/1.1** war perfekt für Breitband-Webanwendungen
- **HTTP-/2** war perfekt für niedrige MSK-Verdrahtungen
- **HTTP-/3** wird für die mobile gebaut, die erste Version von ,, unzuverlässig, die Netzwerk-Realität in der wir leben

Der Fehler war zu denken, dass eine von ihnen permanente Lösungen waren, die alle Antworten auf spezifische Umweltbelastungen waren, wenn sich die Umwelt änderte, musste das Protokoll folgen.

**HTTP-Versionen sind keine Upgrades im Sinne des Verbrauchers.Sie sind Tradeoffs optimiert für unterschiedliche Fehlerverteilungen.**

Und immer noch ,,' nach alldem die Grundlagen bleiben

- Anträge scheitern
- Netze liegen
- Caching ist schwer
- Idempotenzfragen

Das Protokoll hat sich entwickelt. Die Probleme sind verschwunden.

Build-Systeme, die Ausfälle überstehen Test auf realen Netzwerken Verstehst du, dass jede HTTP-Version ein Tradeoff ist, das durch seine Ära geformt wird .

Und in einem anderen Jahrzehnt werden die Annahmen von HTTP-/3' wahrscheinlich so aussehen, wie es HTTP-/1.0's jetzt tun

## Literaturhinweise

- [RFC - HTTP - /3](https://datatracker.ietf.org/doc/html/rfc9114) Die offizielle Spezifikation
- [QUIC](https://datatracker.ietf.org/doc/html/rfc9000) Das Transportprotokoll
- [HTTP-/2-erklärt](https://http2-explained.haxx.se/) Daniel Stenberg®'Ausgezeichneter Überblick
- [Hochleistungs-Browsernetzwerke](https://hpbn.co/) Ilya Grigorik''s Tieftauchgang Kostenlos online