Le web est maintenu par des accords exacts. Un champ Content-Length doit signifier la même chose à chaque étape. Un cache ne doit pas réutiliser une réponse qui nécessite une validation. Une section de champ HTTP/3 mal formée doit échouer au niveau approprié. Une méthode sûre doit rester sûre après être passée par un proxy inverse.
Webship 1.3.1 est construit autour d'une règle : la vitesse compte seulement lorsque les octets conservent leur signification.
C’est pourquoi nous décrivons Webship comme le serveur web généraliste le plus compatible RFC au monde. Il s’agit d’une affirmation technique avec une limite visible, et non d’une affirmation selon laquelle chaque fonctionnalité optionnelle de chaque RFC existe. La carte ci-dessous nomme les 52 RFC qui affectent le comportement actif du serveur de Webship ou ses fondations protocolaires propres. Les standards actuels viennent en premier. Les documents remplacés sont identifiés comme une lignée de compatibilité. Les projets de spécifications ne sont pas requalifiés en tant que RFC.
La compatibilité est un comportement, pas un badge
Webship applique des normes aux endroits où les serveurs de production deviennent le plus souvent ambigus :
- Le cadrage HTTP/1.1 rejette les longueurs conflictuelles, les codages de transfert invalides, les cibles de requête surdimensionnées, les fragments malformés et les formes de contrebande de requête.
- HTTP/2 et HTTP/3 rejettent les champs de connexion interdits, valident les pseudo-champs, limitent les sections de champs compressés et maintiennent les erreurs de flux séparées des erreurs de connexion.
- Les fichiers statiques préservent la sémantique HEAD, les validateurs, l'ordre des préconditions, les plages d'octets, les redirections et les types de contenu.
- Le proxy inverse préserve l'encadrement, l'annulation, les en-têtes de fin, les mises à niveau, les réessais sûrs et l'identité de transfert tout en supprimant les champs de saut par saut.
- Le cache calcule l'âge, la fraîcheur, la revalidation, Vary, l'invalidation et les règles d'utilisation périmée plutôt que de traiter la mise en cache comme un raccourci clé-valeur.
- TLS, QUIC, ACME, les données précoces et WebTransport utilisent un état borné et une politique d'échec explicite.
Les mêmes règles s'appliquent sur le chemin rapide. Webship ne définit pas un « chemin correct » et un chemin de référence différent.
Sémantique HTTP, structuration, mise en cache et intermédiation
- RFC 3986 — Identifiant Uniforme de Ressource (URI) : Syntaxe Générique. Webship normalise les références relatives Location et Content-Location, y compris les segments point, avant les décisions d'invalidation du cache.
- RFC 6455 — Le protocole WebSocket. Les mises à niveau via un reverse-proxy valident la clé WebSocket, la valeur acceptée, le sous-protocole, les extensions et la transition de tunnel.
- RFC 6585 — Codes d'état HTTP supplémentaires. Les champs de requête surdimensionnés utilisent la réponse 431 définie lorsque qu'une réponse HTTP est encore possible.
- RFC 6797 — HTTP Strict Transport Security. Strict-Transport-Security n'est émis qu'au-dessus d'un transport sécurisé et ne fuit jamais d'une entrée de cache neutre par rapport au transport vers le HTTP en clair.
- RFC 7235 — Authentification HTTP/1.1. Les jetons du schéma d'authentification sont analysés de manière insensible à la casse, y compris la surface de contrôle MCP protégée. Sa sémantique HTTP générale se trouve maintenant dans le RFC 9110.
- RFC 7239 — Extension HTTP Forwarded. Les opérateurs peuvent choisir un champ Forwarded basé sur les standards, les anciens champs X-Forwarded, les deux, ou aucun ; les champs d'identité entrants non fiables sont supprimés en premier.
- RFC 7540 — HTTP/2. Cela est conservé comme lignée de compatibilité HTTP/2 ; le contrat HTTP/2 actif est son successeur, le RFC 9113.
- RFC 7541 — HPACK : Compression des en-têtes pour HTTP/2. La pile HTTP/2 détenue par Webship limite l'état du décodeur et les tables de l'encodeur tout en préservant le format sur le fil HPACK et le codage Huffman.
- RFC 7838 — Services HTTP alternatifs. Alt-Svc annonce un point de terminaison HTTP/3 sans modifier l'origine représentée par l'URL.
- RFC 8441 — Initialisation des WebSockets avec HTTP/2. Webship prend en charge la fondation de négociation extended-CONNECT en aval. Il ne prétend pas qu'un amont HTTP/1.1 implémente extended CONNECT de HTTP/2 ; les combinaisons d'amont non prises en charge échouent explicitement.
- RFC 8470 — Utilisation des données anticipées dans HTTP. Les requêtes anticipées que Webship ne traitera pas reçoivent 425 Too Early au lieu d'être traitées avec des hypothèses de relecture non sécurisées.
- RFC 8941 — Valeurs de champs structurés pour HTTP. Les valeurs de priorité HTTP utilisent l'analyse de dictionnaire de champ structuré ; les champs optionnels mal formés sont complètement ignorés.
- RFC 9110 — Sémantique HTTP. Les méthodes, codes d'état, champs, validateurs, préconditions, redirections, métadonnées de contenu, HEAD, CONNECT, OPTIONS et la sémantique des plages partagent un contrat unique à travers les versions du protocole.
- RFC 9111 — Mise en cache HTTP. Webship implémente l'âge corrigé, la fraîcheur explicite, Vary, only-if-cached, must-revalidate, proxy-revalidate, l'utilisation sûre des contenus périmés et l'invalidation des URI effectives et associées.
- RFC 9112 — HTTP/1.1. Les règles de ligne de requête, de champ, de longueur du corps, de codage de transfert, de chunk, de trailer, de persistance et de fermeture délimitée sont appliquées avant la distribution à l'application.
- RFC 9113 — HTTP/2. L'ordre des pseudo-champs, l'autorité, les champs de connexion interdits, les restrictions TE, le cycle de vie des flux, le contrôle de flux, GOAWAY et la portée des erreurs sont gérés par le chemin H2 appartenant à Webship.
- RFC 9114 — HTTP/3. Webship possède les chemins de requête, flux de contrôle, SETTINGS, flux critique, annulation et erreur flux-contre-connexion utilisés par son serveur HTTP/3.
- RFC 9204 — QPACK : Compression des champs pour HTTP/3. La capacité de la table dynamique est limitée par la limite annoncée, les flux d'instructions restent analysables à capacité zéro, et un état invalide devient l'erreur QPACK requise.
- RFC 9218 — Schéma de priorisation extensible pour HTTP. L'urgence et la livraison incrémentale guident la planification HTTP/3 tandis que les paramètres de priorité inconnus restent extensibles.
- RFC 9220 — Initialisation des WebSockets avec HTTP/3. Webship implémente la base SETTINGS étendues-CONNECT de HTTP/3 utilisée par les protocoles modernes en tunnel ; cela n'implique pas que tous les protocoles CONNECT soient acceptés.
- RFC 9297 — Datagrammes HTTP et le protocole Capsule. Les sessions WebTransport utilisent un décodage de capsule limité et une association de datagrammes HTTP, les capsules inconnues étant traitées comme des points d’extension plutôt que comme des échecs de l’analyseur.
- RFC 9421 — Signatures de messages HTTP. La traçabilité facultative des réponses Ed25519 peut couvrir l'identité de la version et de la configuration de Webship sans remplacer TLS ou l'authentification de l'application.
- RFC 10008 — La méthode HTTP QUERY. Webship considère QUERY comme sûr et idempotent, préserve son corps lors du passage par un proxy, inclut le corps et les métadonnées de représentation dans l'identité du cache, interdit la fraîcheur heuristique, prend en charge le comportement conditionnel et par plage, et n'invalide jamais un cache simplement parce que QUERY a été utilisé.
Transport QUIC et contrôle de congestion
- RFC 3465 — Contrôle de congestion TCP avec comptage approprié des octets. La logique de comptage approprié des octets fait partie de la lignée de contrôle de congestion NewReno utilisée par l’implémentation QUIC de Webship.
- RFC 4303 — Paquet de sécurité encapsulant IP. Webship n’implémente pas IPsec ESP ; son déduplicateur de paquets QUIC utilise la technique anti-rejeu à fenêtre glissante du RFC uniquement comme lignée d’implémentation.
- RFC 5681 — Contrôle de congestion TCP. Les seuils de perte et de réorganisation héritent des contraintes établies de contrôle de congestion où QUIC se base sur la pratique TCP.
- RFC 6298 — Calcul du minuteur de retransmission TCP. Les calculs du temps de trajet aller-retour moyen et de la variance contribuent au modèle de récupération QUIC.
- RFC 8312 — CUBIC pour les réseaux rapides de longue distance. Il s'agit de la première spécification du CUBIC conservée en tant que lignée algorithmique ; le RFC 9438 est la norme actuelle.
- RFC 8899 — Découverte du MTU de la couche de paquet pour les transports de datagrammes. Le DPLPMTUD configurable découvre la taille de datagramme QUIC utilisable sans dépendre des signaux fragiles de la couche réseau.
- RFC 8999 — Propriétés indépendantes de la version de QUIC. Les en-têtes longs, les identifiants de connexion, la négociation de version et l'analyse invariante restent sûrs avant qu'un décodeur spécifique à la version ne soit exécuté.
- RFC 9000 — QUIC : un transport multiplexé et sécurisé basé sur UDP. Les identifiants de connexion, les flux, le contrôle de flux, la migration, la validation des adresses, Retry, la réinitialisation sans état, les paramètres de transport et le comportement de fermeture forment la base du transport HTTP/3 de Webship.
- RFC 9001 — Utilisation de TLS pour sécuriser QUIC. Les secrets initiaux, la protection des paquets, la protection des en-têtes, l'intégrité des Réessais, les phases de clés et l'intégration TLS suivent les règles QUIC-TLS.
- RFC 9002 — Détection des pertes et contrôle de congestion QUIC. Les espaces de numéros de paquets, les acquittements, le PTO, la détection des pertes, la récupération et le comptage de la congestion garantissent la fiabilité du transport.
- RFC 9221 — Une extension de datagramme non fiable pour QUIC. Les trames DATAGRAM négociées de QUIC transportent du trafic WebTransport non fiable sans le transformer en contenu de flux.
- RFC 9287 — Graissage du bit QUIC. Le graissage du bit QUIC réduit l'ossification tout en préservant la sécurité de la négociation.
- RFC 9308 — Applicabilité du protocole de transport QUIC. Les paramètres par défaut opérationnels tels que le temps d'inactivité limité et les directives de déploiement informent la politique de transport de production de Webship.
- RFC 9369 — QUIC Version 2. Les types de paquets de la version 2, les clés initiales, l'intégrité du Retry, les mises à jour des clés et la négociation de version sont implémentés en parallèle avec QUIC v1.
- RFC 9438 — CUBIC pour les réseaux rapides et longue distance. La norme CUBIC actuelle régit le contrôleur de congestion CUBIC de Webship ; BBR et NewReno restent sélectionnables lorsque la charge de travail l’exige.
TLS, certificats et gestion automatique des certificats
- RFC 3339 — Date et heure sur Internet : horodatages. Les fenêtres de renouvellement ACME utilisent des horodatages Internet interopérables.
- RFC 4648 — Encodages de données Base16, Base32 et Base64. Les valeurs ACME JOSE et le matériel de poignée de main WebSocket utilisent les alphabets Base64 et Base64url requis ainsi que les règles de remplissage.
- RFC 5280 — Profil du certificat PKI X.509 et CRL Internet. L'analyse des certificats et les certificats de défi générés utilisent les formes correctes de subjectAltName pour les DNS et les adresses IP binaires.
- RFC 5869 — Fonction de dérivation de clé basée sur HMAC Extract-and-Expand. La dérivation HKDF-SHA-256 et HKDF-SHA-384, y compris les limites de sortie, sert de base aux clés TLS et QUIC.
- RFC 6066 — Extensions TLS. SNI sélectionne les identités DNS, tandis que les adresses IP littérales sont correctement exclues de la forme ordinaire HostName.
- RFC 7301 — Négociation de protocoles de couche application TLS. ALPN sélectionne HTTP/1.1, HTTP/2, HTTP/3 et le protocole de défi ACME isolé à la frontière TLS.
- RFC 7638 — Empreinte du JSON Web Key. Les empreintes des clés de compte ACME sont dérivées sous la forme JWK canonique.
- RFC 7807 — Détails des problèmes pour les API HTTP. Webship utilise le format de document de problème requis par les serveurs ACME selon le RFC 8555. La spécification plus récente des Détails des problèmes le remplace pour les nouvelles API à usage général, mais la dépendance normative d'ACME reste explicite.
- RFC 8446 — TLS 1.3. Webship utilise TLS 1.3 pour le TLS public, y compris les tickets de session, les mises à jour de clés, les alertes, la politique des données précoces et la dérivation de clés QUIC.
- RFC 8555 — Environnement de Gestion Automatique des Certificats. Les flux de compte, de commande, d'autorisation, de défi, de finalisation, de téléchargement de certificat et de renouvellement sont automatisés avec une gestion des entrées limitée.
- RFC 8737 — Défi ACME TLS-ALPN-01. Un chemin TLS réservé aux défis ne négocie que acme-tls/1 et fournit l'extension de certificat critique acmeIdentifier requise.
- RFC 8738 — Extension de validation des identifiants IP ACME. Webship prend en charge les commandes de certificats IPv4 et IPv6, les SAN IP binaires et le SNI inversé pour la validation IP TLS-ALPN-01.
- RFC 9525 — Identité de service dans TLS. Les noms DNS et les identités IP sont appariés selon les règles actuelles d'identité de service, sans raccourcis par caractères génériques ou noms communs pour les adresses IP.
- RFC 9773 — Extension d'information sur le renouvellement ACME. Les fenêtres de renouvellement peuvent provenir de l'AC, permettant à Webship de répartir les renouvellements en toute sécurité au lieu d'utiliser un calendrier local rigide.
WebTransport : précis sur ce qui est standardisé
WebTransport sur HTTP/3 n'est pas compté comme un cinquante-troisième RFC. À partir de Webship 1.3.1, sa cartographie en ligne reste draft-ietf-webtrans-http3-16. Webship implémente ce brouillon au-dessus du HTTP/3 standardisé, du CONNECT étendu, du QUIC DATAGRAM, du Datagram HTTP et des couches Capsule nommées ci-dessus. Il implémente également l'extension négociée RESET_STREAM_AT requise pour préserver un préfixe d'identification de session fiable lorsqu'un flux WebTransport est réinitialisé.
Cette distinction est importante. La compatibilité avec les standards n’est pas améliorée en appelant un brouillon un RFC. Elle est améliorée en suivant explicitement le brouillon, en l’isolant des chemins HTTP ordinaires, en négociant chaque extension, en limitant chaque ressource de session et en testant le comportement en cas d’annulation et de défaillance.
Pourquoi cette étendue est importante dans la production
Un bug de standards est rarement isolé. Une gestion incorrecte du HSTS peut traverser une limite de cache. Une instruction QPACK mal formée peut terminer des requêtes non liées. Une hypothèse de données précoces non sécurisée peut rejouer une opération. Une clé de cache QUERY qui omet le corps de la requête peut renvoyer le résultat d'une requête différente. Un proxy qui supprime les trailers ou gère mal l'annulation peut modifier silencieusement un protocole d'application.
L'architecture de Webship considère ces éléments comme des préoccupations liées. Les limites du parseur, l'inspection de sécurité, la mise en cache, le proxy inverse, l'état du transport et l'instrumentation partagent des contrats explicites. Le résultat est un serveur capable de passer entre HTTP/1.1, HTTP/2, HTTP/3, la livraison statique, le proxy inverse, le streaming et WebTransport sans donner à chaque mode une définition différente de la validité.
Vérifiez la réclamation
Ne prenez pas un superlatif pour argent comptant. Lisez la [documentation de Webship 1.3.1](/docs/1.3.1), inspectez la configuration et les limites du protocole, et reproduisez le comportement publié. Ensuite, [téléchargez Webship](/downloads) et testez les cas limites qui sont importants pour votre système.