Torna al blog Webship

Webship ingegneria

Webship: Il server web più compatibile con le RFC al mondo

Webship trasforma i requisiti RFC in comportamenti espliciti su HTTP/1.1, HTTP/2, HTTP/3, QUIC, TLS, caching, reverse proxying, WebTransport, ACME e il nuovo metodo QUERY. Esplora la mappa completa degli standard di 52 RFC.

Il web è tenuto insieme da accordi precisi. Un campo Content-Length deve significare la stessa cosa a ogni passaggio. Una cache non deve riutilizzare una risposta che richiede la convalida. Una sezione di campo HTTP/3 malformata deve fallire all'ambito corretto. Un metodo sicuro deve rimanere sicuro dopo essere passato attraverso un proxy inverso.

Webship 1.3.1 è costruito attorno a una regola: la velocità conta solo quando i byte mantengono il loro significato.

Ecco perché descriviamo Webship come il server web general-purpose più conforme agli RFC al mondo. Si tratta di un'affermazione ingegneristica con un confine visibile, non di un'affermazione secondo cui ogni funzionalità opzionale in ogni RFC esista. La mappa sottostante nomina i 52 RFC che influenzano il comportamento attivo del server di Webship o le sue fondamenta di protocollo di proprietà. Gli standard attuali vengono prima. I documenti superati sono identificati come linea di compatibilità. Le specifiche in bozza non vengono rinominate come RFC.

La compatibilità è comportamento, non un distintivo

Webship applica standard nei punti in cui i server di produzione diventano più spesso ambigui:

  • Il framing HTTP/1.1 rifiuta lunghezze contrastanti, codifiche di trasferimento non valide, destinazioni di richiesta sovradimensionate, chunk malformati e forme di request-smuggling.
  • HTTP/2 e HTTP/3 rifiutano campi di connessione proibiti, convalidano i pseudo-campi, limitano le sezioni dei campi compressi e tengono separati gli errori di flusso dagli errori di connessione.
  • I file statici preservano la semantica HEAD, i validatori, l'ordine delle precondizioni, gli intervalli di byte, i reindirizzamenti e i tipi di contenuto.
  • Il reverse proxy preserva l'inquadramento, la cancellazione, i trailer, gli aggiornamenti, i retry sicuri e l'identità di inoltro mentre rimuove i campi hop-by-hop.
  • La cache calcola regole di età, freschezza, rivalidazione, Vary, invalidazione e uso obsoleto piuttosto che trattare la memorizzazione nella cache come una scorciatoia chiave-valore.
  • TLS, QUIC, ACME, dati anticipati e WebTransport utilizzano uno stato limitato e una politica di fallimento esplicita.

Le stesse regole si applicano sul percorso veloce. Webship non definisce un percorso “corretto” e un percorso di riferimento diverso.

Semantica HTTP, incorniciatura, caching e proxy

  • RFC 3986 — Identificatore di Risorsa Uniforme (URI): Sintassi Generica. Webship normalizza i riferimenti relativi a Location e Content-Location, inclusi i segmenti punto, prima delle decisioni di invalidazione della cache.
  • RFC 6455 — Il Protocollo WebSocket. Gli upgrade tramite reverse-proxy convalidano la chiave WebSocket, il valore di accettazione, il sottoprotocollo, le estensioni e la transizione del tunnel.
  • RFC 6585 — Codici di stato HTTP aggiuntivi. I campi di richiesta sovradimensionati utilizzano la risposta 431 definita quando una risposta HTTP è ancora possibile.
  • RFC 6797 — HTTP Strict Transport Security. Strict-Transport-Security viene emesso solo su trasporto sicuro e non perde mai da una voce di cache neutra rispetto al trasporto su HTTP in chiaro.
  • RFC 7235 — Autenticazione HTTP/1.1. I token dello schema di autenticazione vengono analizzati senza distinzione tra maiuscole e minuscole, incluso il pannello di controllo protetto MCP. La sua semantica generale HTTP ora risiede in RFC 9110.
  • RFC 7239 — Estensione HTTP Forwarded. Gli operatori possono selezionare un campo Forwarded basato sugli standard, campi X-Forwarded legacy, entrambi o nessuno; i campi di identità in ingresso non affidabili vengono rimossi per primi.
  • RFC 7540 — HTTP/2. Questo è mantenuto come linea di compatibilità con HTTP/2; il contratto HTTP/2 attivo è il suo successore, RFC 9113.
  • RFC 7541 — HPACK: Compressione degli Header per HTTP/2. Lo stack HTTP/2 di proprietà di Webship limita lo stato del decodificatore e le tabelle del codificatore mantenendo il formato wire HPACK e la codifica di Huffman.
  • RFC 7838 — Servizi alternativi HTTP. Alt-Svc pubblicizza un endpoint HTTP/3 senza modificare l'origine rappresentata dall'URL.
  • RFC 8441 — Avvio dei WebSocket con HTTP/2. Webship supporta la base di negoziazione extended-CONNECT a valle. Non pretende che un upstream HTTP/1.1 implementi HTTP/2 extended CONNECT; le combinazioni upstream non supportate falliscono esplicitamente.
  • RFC 8470 — Utilizzo dei Dati Precoce in HTTP. Le richieste anticipate che Webship non elaborerà ricevono 425 Too Early invece di essere gestite con ipotesi di riproduzione non sicure.
  • RFC 8941 — Valori dei Campi Strutturati per HTTP. I valori di priorità HTTP utilizzano il parsing del dizionario dei campi strutturati; i campi opzionali non validi vengono ignorati nel loro insieme.
  • RFC 9110 — Semantica HTTP. Metodi, codici di stato, campi, validatori, precondizioni, reindirizzamenti, metadati dei contenuti, HEAD, CONNECT, OPTIONS e semantica degli intervalli condividono un contratto attuale unico tra le versioni del protocollo.
  • RFC 9111 — Caching HTTP. Webship implementa età corretta, freschezza esplicita, Vary, only-if-cached, must-revalidate, proxy-revalidate, uso sicuro di stale e invalidazione degli URI effettivi e correlati.
  • RFC 9112 — HTTP/1.1. Le regole relative a request-line, field, body-length, transfer-coding, chunk, trailer, persistenza e chiusura delimitata vengono applicate prima della distribuzione all'applicazione.
  • RFC 9113 — HTTP/2. L'ordine dei pseudo-campi, l'autorità, i campi di connessione proibiti, le restrizioni TE, il ciclo di vita dello stream, il controllo del flusso, GOAWAY e l'ambito degli errori sono gestiti dal percorso H2 di proprietà di Webship.
  • RFC 9114 — HTTP/3. Webship possiede le rotte di richiesta, controllo-stream, SETTINGS, critical-stream, cancellazione e errore stream-versus-connection utilizzate dal suo server HTTP/3.
  • RFC 9204 — QPACK: Compressione dei campi per HTTP/3. La capacità della tabella dinamica è limitata dal limite pubblicizzato, i flussi di istruzioni rimangono analizzabili a capacità zero e lo stato non valido diventa l'errore QPACK richiesto.
  • RFC 9218 — Schema di Prioritizzazione Estensibile per HTTP. Urgenza e consegna incrementale guidano la pianificazione di HTTP/3 mentre i parametri di priorità sconosciuti rimangono estensibili.
  • RFC 9220 — Avvio dei WebSocket con HTTP/3. Webship implementa le impostazioni di base extended-CONNECT di HTTP/3 utilizzate dai moderni protocolli tunnel; ciò non implica che ogni possibile protocollo CONNECT sia accettato.
  • RFC 9297 — Datagrammi HTTP e Protocollo Capsule. Le sessioni WebTransport utilizzano la decodifica a capsule limitata e l'associazione con i Datagrammi HTTP, con le capsule sconosciute gestite come punti di estensione anziché come errori del parser.
  • RFC 9421 — HTTP Message Signatures. La tracciabilità opzionale della risposta Ed25519 può coprire l'identità della versione e della configurazione di Webship senza sostituire TLS o l'autenticazione dell'applicazione.
  • RFC 10008 — Il Metodo HTTP QUERY. Webship tratta QUERY come sicuro e idempotente, preserva il suo corpo durante il proxying, include il corpo e i metadati della rappresentazione nell'identità della cache, proibisce la freschezza euristica, supporta comportamenti condizionali e a intervalli, e non invalida mai una cache semplicemente perché è stato utilizzato QUERY.

Trasporto QUIC e controllo della congestione

TLS, certificati e gestione automatica dei certificati

WebTransport: preciso su ciò che è standardizzato

WebTransport su HTTP/3 non è considerato come cinquantaquattresimo RFC. A partire da Webship 1.3.1, la sua mappatura sul filo rimane draft-ietf-webtrans-http3-16. Webship implementa quel draft sopra l'HTTP/3 standardizzato, CONNECT esteso, QUIC DATAGRAM, HTTP Datagram e i livelli Capsule sopra menzionati. Implementa anche l'estensione RESET_STREAM_AT negoziata necessaria per preservare un prefisso identificativo di sessione affidabile quando un flusso WebTransport viene resettato.

Quella distinzione è importante. La compatibilità degli standard non viene migliorata chiamando un draft un RFC. Viene migliorata seguendo esplicitamente il draft, isolandolo dai percorsi HTTP ordinari, negoziando ogni estensione, limitando ogni risorsa di sessione e testando il comportamento in caso di cancellazione e guasto.

Perché questa ampiezza è importante nella produzione

Un bug di standard è raramente isolato. La gestione scorretta di HSTS può attraversare un confine di cache. Un'istruzione QPACK malformata può terminare richieste non correlate. Un'assunzione insicura sui dati iniziali può ripetere un'operazione. Una chiave di cache QUERY che omette il corpo della richiesta può restituire il risultato di una query diversa. Un proxy che rimuove i trailer o gestisce male la cancellazione può modificare silenziosamente un protocollo applicativo.

L'architettura di Webship tratta questi come problemi collegati. I limiti del parser, l'ispezione di sicurezza, la memorizzazione nella cache, il reverse proxy, lo stato del trasporto e l'instradamento condividono contratti espliciti. Il risultato è un server che può passare tra HTTP/1.1, HTTP/2, HTTP/3, consegna statica, reverse proxy, streaming e WebTransport senza dare a ciascuna modalità una definizione diversa di correttezza.

Verifica l'affermazione

Non accettare un superlativo sulla fiducia. Leggi la [documentazione di Webship 1.3.1](/docs/1.3.1), esamina la configurazione e i confini del protocollo, e riproduci il comportamento pubblicato. Poi [scarica Webship](/downloads) e testa i casi limite che contano per il tuo sistema.