Web-ul este ținut împreună prin acorduri exacte. Un câmp Content-Length trebuie să însemne același lucru la fiecare nod. Un cache nu trebuie să reutilizeze un răspuns care necesită validare. O secțiune de câmp HTTP/3 formatată incorect trebuie să eșueze la domeniul corect. O metodă sigură trebuie să rămână sigură după ce trece printr-un proxy invers.
Webship 1.3.1 este construit în jurul unei reguli: viteza contează doar atunci când biții își păstrează înțelesul.
De aceea descriem Webship ca fiind cel mai compatibil server web general cu RFC-urile din lume. Aceasta este o afirmație inginerească cu o limită vizibilă, nu o afirmație că fiecare funcție opțională din fiecare RFC există. Harta de mai jos menționează cele 52 de RFC-uri care afectează comportamentul activ al serverului Webship sau fundațiile protocolului său propriu. Standardele actuale apar primele. Documentele înlocuite sunt identificate ca linie de compatibilitate. Specificațiile în proiect nu sunt redenumite ca RFC-uri.
Compatibilitatea este comportament, nu un badge
Webship aplică standarde în locurile unde serverele de producție devin cel mai des ambigue:
- Încadrarea HTTP/1.1 respinge lungimile conflictuale, codificările de transfer invalide, țintele cererii supradimensionate, bucățile de date incorect formate și formele de contrabandă a cererilor.
- HTTP/2 și HTTP/3 resping câmpurile de conexiune interzise, validează pseudo-câmpurile, limitează secțiunile de câmp comprimat și păstrează erorile de flux separate de erorile de conexiune.
- Fișierele statice păstrează semantica HEAD, validatoarele, ordinea condițiilor prealabile, intervalele de octeți, redirecționările și tipurile de conținut.
- Proxy-ul invers păstrează încapsularea, anularea, antetele suplimentare, actualizările, reîncercările sigure și identificarea direcționării, în timp ce elimină câmpurile hop-by-hop.
- Cache-ul calculează reguli privind vârsta, prospețimea, revalidarea, Vary, invalidarea și utilizarea expirată, în loc să trateze cache-ul ca un simplu shortcut cheie-valoare.
- TLS, QUIC, ACME, date timpurii și WebTransport folosesc stare limitată și politică explicită de eșec.
Aceleași reguli se aplică pe calea rapidă. Webship nu definește o cale „corectă” și o cale de referință diferită.
Semantica HTTP, structurare, caching și proxy
- RFC 3986 — Identificator Uniform de Resurse (URI): Sintaxă Generică. Webship normalizează referințele relative Location și Content-Location, inclusiv segmentele punct, înainte de deciziile privind invalidarea cache-ului.
- RFC 6455 — Protocolul WebSocket. Upgrade-urile reverse-proxy validează cheia WebSocket, valoarea acceptată, subprotocolul, extensiile și trecerea tunelului.
- RFC 6585 — Coduri de stare HTTP suplimentare. Câmpurile de cerere supradimensionate folosesc răspunsul definit 431 atunci când un răspuns HTTP este încă posibil.
- RFC 6797 — HTTP Strict Transport Security. Strict-Transport-Security este emis doar printr-un transport sigur și nu se scurge niciodată dintr-o intrare de cache neutră față de transport pe HTTP clar.
- RFC 7235 — Autentificarea HTTP/1.1. Tokenurile schemelor de autentificare sunt analizate fără a ține cont de majuscule, inclusiv suprafața de control protejată MCP. Semantica generală HTTP trăiește acum în RFC 9110.
- RFC 7239 — Extensie HTTP Forwarded. Operatorii pot selecta un câmp Forwarded bazat pe standarde, câmpuri X-Forwarded vechi, ambele sau niciunul; câmpurile de identitate inbound neîncredere sunt eliminate mai întâi.
- RFC 7540 — HTTP/2. Acesta este păstrat ca linie de compatibilitate HTTP/2; contractul activ HTTP/2 este succesorul său, RFC 9113.
- RFC 7541 — HPACK: Compresia antetelor pentru HTTP/2. Stiva HTTP/2 deținută de Webship leagă starea decodorului și tabelele codificatorului, păstrând în același timp formatul de transmisie HPACK și codarea Huffman.
- RFC 7838 — Servicii Alternative HTTP. Alt-Svc promovează un punct final HTTP/3 fără a schimba originea reprezentată de URL.
- RFC 8441 — Inițializarea WebSockets cu HTTP/2. Webship suportă baza de negociere extended-CONNECT pentru downstream. Nu pretinde că un upstream HTTP/1.1 implementează HTTP/2 extended CONNECT; combinațiile de upstream neacceptate eșuează în mod explicit.
- RFC 8470 — Utilizarea Datelor Timpurii în HTTP. Solicitarile timpurii pe care Webship nu le va procesa primesc 425 Prea Timpuriu în loc să fie tratate cu presupuneri nesigure de redare.
- RFC 8941 — Valori de câmp structurate pentru HTTP. Valorile de prioritate HTTP folosesc analizarea dicționarului câmpurilor structurate; câmpurile opționale incorect formate sunt ignorate în întregime.
- RFC 9110 — Semantica HTTP. Metodele, codurile de stare, câmpurile, validatoarele, condițiile prealabile, redirecționările, metadatele conținutului, HEAD, CONNECT, OPTIONS și semantica intervalelor împărtășesc un singur contract curent între versiunile protocolului.
- RFC 9111 — Cache-ul HTTP. Webship implementează vârsta corectată, valabilitatea explicită, Vary, only-if-cached, must-revalidate, proxy-revalidate, utilizarea sigură a stale și invalidarea URI-urilor efective și asociate.
- RFC 9112 — HTTP/1.1. Regulile privind linia de cerere, câmpul, lungimea corpului, codarea transferului, segmentul, antetul final, persistența și delimitarea prin închidere sunt aplicate înainte de trimiterea către aplicație.
- RFC 9113 — HTTP/2. Ordinea pseudo-câmpurilor, autoritatea, câmpurile de conexiune interzise, restricțiile TE, ciclul de viață al fluxului, controlul fluxului, GOAWAY și domeniul de eroare sunt gestionate de calea H2 deținută de Webship.
- RFC 9114 — HTTP/3. Webship deține căile de eroare pentru request, control-stream, SETTINGS, critical-stream, anulare și stream-versus-connection utilizate de serverul său HTTP/3.
- RFC 9204 — QPACK: Compresia câmpurilor pentru HTTP/3. Capacitatea tabelei dinamice este limitată de limita declarată, fluxurile de instrucțiuni rămân analizabile la capacitate zero, iar starea nevalidă devine eroarea QPACK necesară.
- RFC 9218 — Schema de prioritizare extensibilă pentru HTTP. Urgența și livrarea incrementală ghidează planificarea HTTP/3 în timp ce parametrii de prioritate necunoscuți rămân extensibili.
- RFC 9220 — Inițializarea WebSockets cu HTTP/3. Webship implementează baza SETTINGS extins-CONNECT HTTP/3 utilizată de protocoalele tunelate moderne; aceasta nu implică faptul că orice protocol CONNECT posibil este acceptat.
- RFC 9297 — Datagramelor HTTP și Protocolul Capsulei. Sesiunile WebTransport utilizează decodarea capsulelor limitate și asocierea Datagramelor HTTP, capsulele necunoscute fiind tratate ca puncte de extensie în loc de eșecuri ale parserului.
- RFC 9421 — Semnături de Mesaje HTTP. Proveniența opțională a răspunsului Ed25519 poate acoperi identitatea release-ului și a configurației Webship fără a înlocui TLS sau autentificarea aplicației.
- RFC 10008 — Metoda QUERY HTTP. Webship tratează QUERY ca fiind sigură și idempotentă, păstrează corpul acesteia prin proxy, include corpul și metadatele reprezentării în identitatea cache-ului, interzice prospețimea euristică, suportă comportamentul condițional și de interval și niciodată nu invalidează un cache doar pentru că a fost folosit QUERY.
Transportul QUIC și controlul congestiei
- RFC 3465 — Controlul congestiei TCP cu numărarea adecvată a octeților. Logica de numărare adecvată a octeților face parte din linia de control a congestiei NewReno utilizată de implementarea QUIC a Webship.
- RFC 4303 — IP Encapsulating Security Payload. Webship nu implementează IPsec ESP; deduplicatorul de pachete QUIC al său folosește tehnica anti-redare cu fereastră glisantă a RFC-ului doar ca linie de implementare.
- RFC 5681 — Controlul congestiei TCP. Pragurile de pierdere și reordonare moștenesc constrângerile stabilite ale controlului congestiei, unde QUIC se bazează pe practica TCP.
- RFC 6298 — Calcularea temporizatorului de retransmisie TCP. Calculul timpului mediu de rotație și al variației contribuie la modelul de recuperare QUIC.
- RFC 8312 — CUBIC pentru rețele rapide pe distanțe lungi. Aceasta este specificația anterioară CUBIC păstrată ca linie de evoluție a algoritmului; RFC 9438 este standardul actual.
- RFC 8899 — Descoperirea MTU pe calea stratului de pachete pentru transporturile de datagrame. DPLPMTUD configurabil descoperă dimensiunea utilizabilă a datagramei QUIC fără a depinde de semnale fragile ale stratului de rețea.
- RFC 8999 — Proprietăți independente de versiune ale QUIC. Headerele lungi, ID-urile conexiunilor, negocierea versiunii și analiza invariantă rămân sigure înainte ca un decodor specific versiunii să ruleze.
- RFC 9000 — QUIC: Un transport multiplexat și securizat bazat pe UDP. ID-urile de conexiune, fluxurile, controlul fluxului, migrarea, validarea adresei, Retry, resetarea stateless, parametrii de transport și comportamentul la închidere formează baza transportului HTTP/3 al Webship.
- RFC 9001 — Utilizarea TLS pentru securizarea QUIC. Secretele inițiale, protecția pachetelor, protecția antetului, integritatea Retry, fazele cheilor și integrarea TLS urmează regulile QUIC-TLS.
- RFC 9002 — Detectarea pierderilor și controlul congestiei QUIC. Spațiile numerelor de pachete, confirmările, PTO, detectarea pierderilor, recuperarea și contabilizarea congestiei conduc fiabilitatea transportului.
- RFC 9221 — O extensie de tip datagramă nesigură pentru QUIC. Cadrele DATAGRAM QUIC negociate transportă trafic WebTransport nesigur fără a-l transforma în conținut de flux.
- RFC 9287 — Ungerea bitului QUIC. Ungerea bitului QUIC reduce osificarea în timp ce păstrează siguranța negocierii.
- RFC 9308 — Aplicabilitatea Protocolului de Transport QUIC. Impliciturile operaționale, cum ar fi timpul de inactivitate limitat și ghidurile de implementare, informează politica de transport în producție a Webship.
- RFC 9369 — QUIC Versiunea 2. Tipurile de pachete versiunea 2, cheile inițiale, integritatea Retry, actualizările de chei și negocierea versiunii sunt implementate împreună cu QUIC v1.
- RFC 9438 — CUBIC pentru rețele rapide și de lungă distanță. Standardul actual CUBIC reglementează controlerul de congestie CUBIC al Webship; BBR și NewReno rămân selectabile atunci când sarcina de lucru o cere.
TLS, certificate și gestionarea automată a certificatelor
- RFC 3339 — Data și Ora pe Internet: Marcaje Temporale. Ferestrele de reînnoire ACME utilizează marcaje temporale pe Internet interoperabile.
- RFC 4648 — Codificările datelor Base16, Base32 și Base64. Valorile ACME JOSE și materialul de inițiere WebSocket folosesc alfabetele și regulile de completare Base64 și Base64url necesare.
- RFC 5280 — Profilul certificatelor PKI X.509 pe Internet și CRL. Analiza certificatelor și certificatele de provocare generate folosesc forme corecte DNS și IP binar pentru subjectAltName.
- RFC 5869 — Funcția de Derivare a Cheilor pe Bază de HMAC — Extrage și Extinde. Derivarea HKDF-SHA-256 și HKDF-SHA-384, inclusiv limitele de ieșire, stă la baza cheilor TLS și QUIC.
- RFC 6066 — Extensii TLS. SNI selectează identități DNS, în timp ce adresele IP literale sunt corect excluse din forma obișnuită de HostName.
- RFC 7301 — Negocierea protocolului la nivel de aplicație TLS. ALPN selectează HTTP/1.1, HTTP/2, HTTP/3 și protocolul izolat de provocare ACME la limita TLS.
- RFC 7638 — Amprenta Cheii JSON Web. Amprentele cheilor contului ACME sunt generate în forma canonică JWK.
- RFC 7807 — Detalii despre Probleme pentru API-urile HTTP. Webship utilizează formatul documentului de probleme cerut de serverele ACME conform RFC 8555. Specificația mai nouă Problem Details îl înlocuiește pentru noile API-uri cu scop general, dar dependența normativă a ACME rămâne explicită.
- RFC 8446 — TLS 1.3. Webship folosește TLS 1.3 pentru TLS public, incluzând bilete de sesiune, actualizări de chei, alerte, politica pentru date timpurii și derivarea cheilor QUIC.
- RFC 8555 — Mediu Automat de Gestionare a Certificatelor. Fluxurile de cont, comandă, autorizare, provocare, finalizare, descărcare a certificatului și reînnoire sunt automatizate cu gestionarea controlată a intrărilor.
- RFC 8737 — Provocarea ACME TLS-ALPN-01. Un traseu TLS doar pentru provocări negociază doar acme-tls/1 și furnizează extensia de certificat critică acmeIdentifier necesară.
- RFC 8738 — Extensia de Validare a Identificatorului IP ACME. Webship acceptă comenzi de certificate IPv4 și IPv6, SAN-uri IP binare și SNI cu adresă inversă pentru validarea IP TLS-ALPN-01.
- RFC 9525 — Identitatea serviciului în TLS. Numele DNS și identitățile IP sunt potrivite conform regulilor curente de identitate a serviciului, fără scurtături cu wildcard sau nume comune pentru adresele IP.
- RFC 9773 — Extensia de Informații pentru Reînnoirea ACME. Ferestrele de reînnoire pot veni de la CA, permițând Webship să distribuie reînnoirile în mod sigur în loc să folosească un singur program local rigid.
WebTransport: precis despre ceea ce este standardizat
WebTransport peste HTTP/3 nu este considerat ca fiind un RFC cu numărul cincizeci și trei. Începând cu Webship 1.3.1, mapa sa de transmisie rămâne draft-ietf-webtrans-http3-16. Webship implementează acel draft deasupra HTTP/3 standardizat, CONNECT extins, QUIC DATAGRAM, Datagram HTTP și straturile Capsule menționate mai sus. De asemenea, implementează extensia negociată RESET_STREAM_AT necesară pentru a păstra un prefix de identificare a sesiunii fiabil atunci când un flux WebTransport este resetat.
Acea distincție contează. Compatibilitatea standardelor nu se îmbunătățește prin numirea unui draft ca RFC. Se îmbunătățește prin urmărirea explicită a draftului, izolarea acestuia de căile HTTP obișnuite, negocierea fiecărei extensii, limitarea fiecărui resursă de sesiune și testarea comportamentului la anulare și eșec.
De ce contează această amploare în producție
Un bug de standard este rar izolat. Gestionarea incorectă a HSTS poate traversa o limită de cache. O instrucțiune QPACK incorectă poate termina cereri nelegate. O presupunere nesigură despre datele timpurii poate repeta o operațiune. O cheie de cache QUERY care omit corpul cererii poate returna rezultatul unei alte interogări. Un proxy care elimină trailerele sau gestionează greșit anularea poate schimba silențios un protocol de aplicație.
Arhitectura Webship tratează aceste aspecte ca preocupări interconectate. Limitele parser-ului, inspectarea securității, caching-ul, proxy-ul invers, starea transportului și instrumentarea împărtășesc contracte explicite. Rezultatul este un singur server care poate trece între HTTP/1.1, HTTP/2, HTTP/3, livrare statică, proxy invers, streaming și WebTransport fără a oferi fiecărui mod o definiție diferită a corectitudinii.
Verificați afirmația
Nu accepta un superlativ pe cuvânt. Citește [documentația Webship 1.3.1](/docs/1.3.1), inspectează configurația și limitele protocolului și reproduce comportamentul publicat. Apoi [descarcă Webship](/downloads) și testează cazurile-limită care contează pentru sistemul tău.