Zurück zum Webship Blog

Webship-Ingenieurwesen

Webship: Der RFC-kompatibelste Webserver der Welt

Webship wandelt RFC-Anforderungen in explizites Verhalten über HTTP/1.1, HTTP/2, HTTP/3, QUIC, TLS, Caching, Reverse-Proxying, WebTransport, ACME und die neue QUERY-Methode um. Erkunden Sie die vollständige 52-RFC-Standards-Karte.

Das Web wird durch genaue Vereinbarungen zusammengehalten. Ein Content-Length-Feld muss an jedem Knoten dasselbe bedeuten. Ein Cache darf keine Antwort wiederverwenden, die eine Validierung erfordert. Ein fehlerhafter HTTP/3-Feldabschnitt muss im richtigen Umfang fehlschlagen. Eine sichere Methode muss auch nach dem Durchlaufen eines Reverse-Proxys sicher bleiben.

Webship 1.3.1 basiert auf einer Regel: Geschwindigkeit zählt nur, wenn die Bytes ihre Bedeutung behalten.

Deshalb beschreiben wir Webship als den RFC-kompatibelsten Allzweck-Webserver der Welt. Dies ist eine technische Aussage mit einem sichtbaren Rahmen, nicht die Behauptung, dass jedes optionale Feature in jedem RFC vorhanden ist. Die nachstehende Karte nennt die 52 RFCs, die das aktive Serververhalten von Webship oder seine eigenen Protokollgrundlagen beeinflussen. Aktuelle Standards stehen an erster Stelle. Abgelöste Dokumente werden als Kompatibilitätslinie gekennzeichnet. Entwurfspezifikationen werden nicht als RFCs umbenannt.

Kompatibilität ist Verhalten, kein Abzeichen

Webship wendet Standards an den Stellen an, an denen Produktionsserver am häufigsten unklar werden:

  • HTTP/1.1-Rahmung lehnt widersprüchliche Längen, ungültige Transfer-Codierungen, übergroße Anforderungsziele, fehlerhafte Chunks und Request-Smuggling-Formen ab.
  • HTTP/2 und HTTP/3 lehnen verbotene Verbindungsfelder ab, validieren Pseudo-Felder, begrenzen komprimierte Feldabschnitte und halten Stream-Fehler von Verbindungsfehlern getrennt.
  • Statische Dateien bewahren HEAD-Semantik, Validatoren, Reihenfolge von Vorbedingungen, Byte-Bereiche, Weiterleitungen und Inhaltstypen.
  • Der Reverse-Proxy bewahrt Framing, Abbruch, Trailer, Upgrades, sichere Wiederholungen und Weiterleitungsidentität, während er Hop-by-Hop-Felder entfernt.
  • Der Cache berechnet Alter, Frische, Revalidierung, Vary, Ungültigmachung und Regeln für die Nutzung von veraltetem Inhalt, anstatt das Caching als einfachen Schlüssel-Wert-Kurzbefehl zu behandeln.
  • TLS, QUIC, ACME, frühe Daten und WebTransport verwenden begrenzten Zustand und explizite Fehlerpolitik.

Die gleichen Regeln gelten auf dem Schnellweg. Webship definiert keinen „richtigen“ Weg und einen anderen Benchmark-Weg.

HTTP-Semantik, Rahmen, Caching und Proxying

  • RFC 3986 — Einheitlicher Ressourcen-Identifier (URI): Generische Syntax. Webship normalisiert relative Location- und Content-Location-Verweise, einschließlich Punktsegmente, bevor Entscheidungen zur Cache-Invalidierung getroffen werden.
  • RFC 6455 — Das WebSocket-Protokoll. Reverse-Proxy-Updates validieren den WebSocket-Schlüssel, akzeptieren Wert, Subprotokoll, Erweiterungen und Tunnel-Übergang.
  • RFC 6585 — Zusätzliche HTTP-Statuscodes. Für übergroße Anforderungsfelder wird die definierte 431-Antwort verwendet, wenn eine HTTP-Antwort noch möglich ist.
  • RFC 6797 — HTTP Strict Transport Security. Strict-Transport-Security wird nur über eine sichere Verbindung gesendet und gelangt niemals von einem transportneutralen Cache-Eintrag auf unverschlüsseltes HTTP.
  • RFC 7235 — HTTP/1.1 Authentifizierung. Authentifizierungsschema-Tokens werden ohne Beachtung der Groß-/Kleinschreibung geparst, einschließlich der geschützten MCP-Steueroberfläche. Ihre allgemeinen HTTP-Semantiken sind jetzt in RFC 9110 zu finden.
  • RFC 7239 — Weitergeleitete HTTP-Erweiterung. Betreiber können ein standardbasiertes Forwarded-Feld, veraltete X-Forwarded-Felder, beides oder keines auswählen; nicht vertrauenswürdige eingehende Identitätsfelder werden zuerst entfernt.
  • RFC 7540 — HTTP/2. Dies wird als HTTP/2-Kompatibilitätslinie beibehalten; der aktive HTTP/2-Vertrag ist dessen Nachfolger, RFC 9113.
  • RFC 7541 — HPACK: Header-Komprimierung für HTTP/2. Webships eigener HTTP/2-Stack begrenzt den Decoder-Zustand und die Encoder-Tabellen, während das HPACK-Wire-Format und die Huffman-Codierung beibehalten werden.
  • RFC 7838 — HTTP Alternative Services. Alt-Svc bewirbt einen HTTP/3-Endpunkt, ohne die durch die URL dargestellte Herkunft zu ändern.
  • RFC 8441 — Bootstrapping von WebSockets mit HTTP/2. Webship unterstützt die nachgelagerte erweiterte-CONNECT-Verhandlungsgrundlage. Es wird nicht vorgetäuscht, dass ein HTTP/1.1-Upstream HTTP/2 extended CONNECT implementiert; nicht unterstützte Upstream-Kombinationen schlagen explizit fehl.
  • RFC 8470 — Verwendung von Early Data in HTTP. Frühzeitige Anfragen, die Webship nicht verarbeitet, erhalten 425 Too Early, anstatt unter unsicheren Wiederholungsannahmen behandelt zu werden.
  • RFC 8941 — Strukturierte Feldwerte für HTTP. HTTP-Prioritätswerte verwenden das Parsen von strukturierten Felder-Dictionaries; fehlerhafte optionale Felder werden vollständig ignoriert.
  • RFC 9110 — HTTP-Semantik. Methoden, Statuscodes, Felder, Validatoren, Voraussetzungen, Weiterleitungen, Inhaltsmetadaten, HEAD, CONNECT, OPTIONS und Bereichssemantik teilen einen aktuellen Vertrag über die Protokollversionen hinweg.
  • RFC 9111 — HTTP-Caching. Webship implementiert korrigiertes Alter, explizite Frische, Vary, only-if-cached, must-revalidate, proxy-revalidate, sichere Nutzung veralteter Inhalte und Ungültigmachung von effektiven und verwandten URIs.
  • RFC 9112 — HTTP/1.1. Anfragezeile, Feld, Körperlänge, Transfer-Codierung, Chunk, Trailer, Persistenz und Close-begrenzte Regeln werden vor der Anwendungsausführung durchgesetzt.
  • RFC 9113 — HTTP/2. Pseudo-Feldreihenfolge, Autorität, verbotene Verbindungsfelder, TE-Beschränkungen, Lebenszyklus des Streams, Flusskontrolle, GOAWAY und Fehlerbereich werden vom H2-Pfad von Webship behandelt.
  • RFC 9114 — HTTP/3. Webship besitzt die Pfade für Anfragen, Steuerströme, SETTINGS, kritische Ströme, Abbruch sowie Stream-gegen-Verbindung-Fehler, die von seinem HTTP/3-Server verwendet werden.
  • RFC 9204 — QPACK: Feldkompression für HTTP/3. Die Kapazität der dynamischen Tabelle ist durch das angekündigte Limit begrenzt, Befehlströme bleiben auch bei null Kapazität analysierbar, und ein ungültiger Zustand wird zum erforderlichen QPACK-Fehler.
  • RFC 9218 — Erweiterbares Priorisierungsschema für HTTP. Dringlichkeit und inkrementelle Zustellung leiten die HTTP/3-Planung, während unbekannte Prioritätsparameter erweiterbar bleiben.
  • RFC 9220 — Bootstrapping von WebSockets mit HTTP/3. Webship implementiert die HTTP/3 extended-CONNECT SETTINGS-Basis, die von modernen getunnelten Protokollen verwendet wird; das bedeutet nicht, dass jedes mögliche CONNECT-Protokoll akzeptiert wird.
  • RFC 9297 — HTTP-Datagramme und das Kapselprotokoll. WebTransport-Sitzungen verwenden begrenztes Kapsel-Decodieren und HTTP-Datagrammzuordnung, wobei unbekannte Kapseln als Erweiterungspunkte statt als Parser-Fehler behandelt werden.
  • RFC 9421 — HTTP-Nachrichtensignaturen. Optionale Ed25519-Antwortherkunft kann die Webship-Version und Konfigurationsidentität abdecken, ohne TLS oder Anwendungsauthentifizierung zu ersetzen.
  • RFC 10008 — Die HTTP QUERY-Methode. Webship behandelt QUERY als sicher und idempotent, bewahrt seinen Körper beim Weiterleiten durch einen Proxy, schließt Körper und Repräsentations-Metadaten in die Cache-Identität ein, verbietet heuristische Frische, unterstützt bedingtes Verhalten und Bereichsverhalten und macht einen Cache niemals ungültig, nur weil QUERY verwendet wurde.

QUIC-Transport und Staukontrolle

TLS, Zertifikate und automatische Zertifikatsverwaltung

WebTransport: genau darüber, was standardisiert ist

WebTransport über HTTP/3 wird nicht als fünfzigdritter RFC gezählt. Ab Webship 1.3.1 bleibt seine Wire-Mapping-Spezifikation draft-ietf-webtrans-http3-16. Webship implementiert diesen Entwurf auf der standardisierten HTTP/3-, erweiterten CONNECT-, QUIC-DATAGRAM-, HTTP-Datagram- und Capsule-Ebene, die oben genannt wurden. Es implementiert auch die ausgehandelte RESET_STREAM_AT-Erweiterung, die erforderlich ist, um ein zuverlässiges, auf Sitzungen bezogenes Präfix zu bewahren, wenn ein WebTransport-Stream zurückgesetzt wird.

Diese Unterscheidung ist wichtig. Die Kompatibilität mit Standards wird nicht dadurch verbessert, dass ein Entwurf als RFC bezeichnet wird. Sie wird dadurch verbessert, dass der Entwurf explizit verfolgt wird, von gewöhnlichen HTTP-Pfaden isoliert wird, jede Erweiterung ausgehandelt wird, jede Sitzungsressource begrenzt wird und das Verhalten bei Abbruch und Fehlern getestet wird.

Warum diese Breite in der Produktion wichtig ist

Ein Standards-Bug ist selten isoliert. Falsches HSTS-Handling kann eine Cache-Grenze überschreiten. Eine fehlerhafte QPACK-Anweisung kann nicht zusammenhängende Anfragen beenden. Eine unsichere Early-Data-Annahme kann eine Operation erneut ausführen. Ein QUERY-Cache-Schlüssel, der den Anfragekörper weglässt, kann das Ergebnis einer anderen Abfrage zurückgeben. Ein Proxy, der Trailer entfernt oder Abbrüche falsch behandelt, kann ein Anwendungsprotokoll stillschweigend ändern.

Die Architektur von Webship behandelt diese als miteinander verbundene Anliegen. Parser-Grenzen, Sicherheitsprüfung, Caching, Reverse-Proxy, Transportzustand und Instrumentierung teilen explizite Verträge. Das Ergebnis ist ein Server, der zwischen HTTP/1.1, HTTP/2, HTTP/3, statischer Bereitstellung, Reverse-Proxy, Streaming und WebTransport wechseln kann, ohne dass jeder Modus eine andere Definition von Korrektheit benötigt.

Überprüfen Sie die Behauptung

Nehmen Sie ein Superlativ nicht auf Vertrauen hin. Lesen Sie die [Webship 1.3.1 Dokumentation](/docs/1.3.1), untersuchen Sie die Konfigurations- und Protokollgrenzen und reproduzieren Sie das veröffentlichte Verhalten. Laden Sie dann [Webship herunter](/downloads) und testen Sie die Grenzfälle, die für Ihr System wichtig sind.