Sieć opiera się na dokładnych porozumieniach. Pole Content-Length musi oznaczać to samo na każdym przeskoku. Pamięć podręczna nie może ponownie używać odpowiedzi, która wymaga walidacji. Błędnie sformatowana sekcja pola HTTP/3 musi zawieść w odpowiednim zakresie. Metoda bezpieczna musi pozostać bezpieczna po przejściu przez serwer proxy wstecznego.
Webship 1.3.1 opiera się na jednej zasadzie: szybkość ma znaczenie tylko wtedy, gdy bajty zachowują swoje znaczenie.
Dlatego opisujemy Webship jako najbardziej zgodny z RFC ogólnego przeznaczenia serwer internetowy na świecie. Jest to twierdzenie inżynierskie z wyraźnymi granicami, a nie stwierdzenie, że każda opcjonalna funkcja we wszystkich RFC istnieje. Poniższa mapa wskazuje 52 RFC, które mają wpływ na aktywne zachowanie serwera Webship lub jego własne podstawy protokołowe. Obecne standardy są wymienione jako pierwsze. Zastąpione dokumenty są oznaczone jako linia zgodności. Wstępne specyfikacje nie są ponownie oznaczane jako RFC.
Kompatybilność to zachowanie, nie odznaka
Webship stosuje standardy w miejscach, w których serwery produkcyjne najczęściej stają się niejednoznaczne:
- Ramkowanie HTTP/1.1 odrzuca sprzeczne długości, nieprawidłowe kodowania transferu, nadmiernie duże cele żądań, niepoprawnie sformatowane fragmenty oraz kształty wstrzykiwania żądań.
- HTTP/2 i HTTP/3 odrzucają zabronione pola połączenia, weryfikują pola pseudo, ograniczają skompresowane sekcje pól i utrzymują błędy strumienia oddzielnie od błędów połączenia.
- Pliki statyczne zachowują semantykę HEAD, walidatory, kolejność warunków wstępnych, zakresy bajtów, przekierowania i typy treści.
- Serwer proxy wsteczny zachowuje struktury ramki, anulowanie, nagłówki końcowe, aktualizacje, bezpieczne ponawianie prób oraz przekazywanie tożsamości, jednocześnie usuwając pola hop-by-hop.
- Pamięć podręczna oblicza wiek, świeżość, ponowną walidację, nagłówek Vary, unieważnianie i reguły użycia przestarzałych danych, zamiast traktować cache'owanie jako skrót klucz-wartość.
- TLS, QUIC, ACME, wczesne dane i WebTransport używają ograniczonego stanu i jawnej polityki awarii.
Te same zasady mają zastosowanie w trybie szybkiej ścieżki. Webship nie definiuje jednej „poprawnej” ścieżki i innej ścieżki odniesienia.
Semantyka HTTP, ramowanie, buforowanie i pośrednictwo
- RFC 3986 — Jednolity identyfikator zasobów (URI): składnia ogólna. Webship normalizuje względne odwołania Location i Content-Location, w tym segmenty kropkowe, przed podejmowaniem decyzji o unieważnieniu pamięci podręcznej.
- RFC 6455 — Protokół WebSocket. Odwrotne proxy aktualizuje weryfikację klucza WebSocket, wartości akceptacji, podprotokółu, rozszerzeń i przejścia tunelowego.
- RFC 6585 — Dodatkowe kody statusu HTTP. Pola żądań o nadmiernym rozmiarze używają zdefiniowanej odpowiedzi 431, gdy odpowiedź HTTP jest nadal możliwa.
- RFC 6797 — HTTP Strict Transport Security. Strict-Transport-Security jest wysyłany tylko przez bezpieczny transport i nigdy nie wycieka z neutralnego względem transportu wpisu pamięci podręcznej na nieszyfrowany HTTP.
- RFC 7235 — Uwierzytelnianie HTTP/1.1. Tokeny schematów uwierzytelniania są analizowane bez rozróżniania wielkości liter, w tym chroniona powierzchnia sterowania MCP. Jego ogólne semantyki HTTP teraz znajdują się w RFC 9110.
- RFC 7239 — Rozszerzenie HTTP Forwarded. Operatorzy mogą wybrać standardowe pole Forwarded, przestarzałe pola X-Forwarded, oba lub żadne; najpierw usuwane są niezweryfikowane pola tożsamości przychodzącej.
- RFC 7540 — HTTP/2. Jest to zachowane jako linia kompatybilności z HTTP/2; aktywnym kontraktem HTTP/2 jest jego następca, RFC 9113.
- RFC 7541 — HPACK: Kompresja nagłówków dla HTTP/2. Stos HTTP/2 należący do Webship ogranicza stan dekodera i tablice enkodera, zachowując jednocześnie format przewodowy HPACK i kodowanie Huffmana.
- RFC 7838 — HTTP Usługi Alternatywne. Alt-Svc reklamuje punkt końcowy HTTP/3 bez zmiany źródła reprezentowanego przez URL.
- RFC 8441 — Inicjalizacja WebSockets za pomocą HTTP/2. Webship obsługuje rozszerzoną podstawę negocjacji CONNECT w dół. Nie udaje, że HTTP/1.1 upstream implementuje rozszerzony CONNECT w HTTP/2; nieobsługiwane kombinacje upstream kończą się jawnie niepowodzeniem.
- RFC 8470 — Wykorzystywanie wczesnych danych w HTTP. Wczesne żądania, które Webship nie będzie przetwarzać, otrzymują 425 Too Early zamiast być obsługiwane z niebezpiecznymi założeniami powtórzeń.
- RFC 8941 — Strukturalne wartości pól dla HTTP. Wartości priorytetu HTTP używają analizowania słownika pola strukturalnego; nieprawidłowe pola opcjonalne są ignorowane w całości.
- RFC 9110 — Semantyka HTTP. Metody, kody statusu, pola, walidatory, warunki wstępne, przekierowania, metadane treści, HEAD, CONNECT, OPTIONS i semantyka zakresu mają jeden aktualny kontrakt we wszystkich wersjach protokołu.
- RFC 9111 — Pamięć podręczna HTTP. Webship wdraża skorygowany wiek, jawne określenie świeżości, Vary, only-if-cached, must-revalidate, proxy-revalidate, bezpieczne użycie przeterminowanych danych oraz unieważnianie skutecznych i powiązanych URI.
- RFC 9112 — HTTP/1.1. Zasady dotyczące linii żądania, pól, długości ciała, kodowania transferu, fragmentów, nagłówków końcowych, utrzymywania połączenia i zamykania są egzekwowane przed wysłaniem do aplikacji.
- RFC 9113 — HTTP/2. Pseudo-pola order, authority, zabronione pola połączenia, ograniczenia TE, cykl życia strumienia, kontrola przepływu, GOAWAY i zakres błędów są obsługiwane przez ścieżkę H2 należącą do Webship.
- RFC 9114 — HTTP/3. Webship posiada ścieżki żądań, strumienia sterującego, SETTINGS, strumienia krytycznego, anulowania oraz błędów strumienia kontra połączenie używane przez jego serwer HTTP/3.
- RFC 9204 — QPACK: Kompresja pól dla HTTP/3. Pojemność tabeli dynamicznej jest ograniczona przez ogłoszony limit, strumienie instrukcji pozostają parsowalne przy zerowej pojemności, a nieprawidłowy stan staje się wymaganym błędem QPACK.
- RFC 9218 — Rozszerzalny schemat priorytetyzacji dla HTTP. Pilność i stopniowe dostarczanie sterują harmonogramowaniem HTTP/3, podczas gdy nieznane parametry priorytetu pozostają rozszerzalne.
- RFC 9220 — Uruchamianie WebSockets za pomocą HTTP/3. Webship implementuje fundament ustawień HTTP/3 extended-CONNECT używany przez nowoczesne protokoły tunelowane; nie oznacza to, że każdy możliwy protokół CONNECT jest akceptowany.
- RFC 9297 — Ramki HTTP i protokół Capsule. Sesje WebTransport używają ograniczonego dekodowania kapsułek i powiązania z ramkami HTTP, przy czym nieznane kapsułki są traktowane jako punkty rozszerzeń zamiast jako błędy parsera.
- RFC 9421 — Podpisy wiadomości HTTP. Opcjonalne pochodzenie odpowiedzi Ed25519 może obejmować wersję i konfigurację Webship bez zastępowania TLS ani uwierzytelniania aplikacji.
- RFC 10008 — Metoda HTTP QUERY. Webship traktuje QUERY jako bezpieczną i idempotentną, zachowuje jej ciało podczas proxy, uwzględnia ciało i metadane reprezentacji w tożsamości pamięci podręcznej, zabrania heurystycznej świeżości, obsługuje zachowanie warunkowe i zakresowe oraz nigdy nie unieważnia pamięci podręcznej tylko dlatego, że użyto QUERY.
Transport QUIC i kontrola zatorów
- RFC 3465 — Sterowanie przeciążeniem TCP z użyciem odpowiedniego liczenia bajtów. Logika odpowiedniego liczenia bajtów jest częścią linii kontrolnej przeciążenia NewReno używanej w implementacji QUIC Webship.
- RFC 4303 — IP Encapsulating Security Payload. Webship nie implementuje IPsec ESP; jego deduplikator pakietów QUIC używa techniki zapobiegającej powtórzeniom z oknem przesuwanym z RFC wyłącznie jako linii implementacyjnej.
- RFC 5681 — Kontrola przeciążenia TCP. Progi utraty i zmiany kolejności dziedziczą ustalone ograniczenia kontroli przeciążenia, na których QUIC opiera się na praktyce TCP.
- RFC 6298 — Obliczanie timera retransmisji TCP. Obliczenia wygładzonego czasu podróży w obie strony i wariancji mają udział w modelu odzyskiwania QUIC.
- RFC 8312 — CUBIC dla szybkich sieci dalekiego zasięgu. Jest to wcześniejsza specyfikacja CUBIC zachowana jako linia rozwoju algorytmu; RFC 9438 jest obecnym standardem.
- RFC 8899 — Odkrywanie MTU ścieżki warstwy pakietowej dla transportów datagramowych. Konfigurowalny DPLPMTUD odkrywa użyteczny rozmiar datagramu QUIC bez polegania na podatnych na awarie sygnałach warstwy sieciowej.
- RFC 8999 — Właściwości QUIC niezależne od wersji. Długie nagłówki, identyfikatory połączeń, negocjacja wersji i niezmienna analiza pozostają bezpieczne, zanim uruchomi się dekoder specyficzny dla wersji.
- RFC 9000 — QUIC: UDP-oparty, multipleksowany i bezpieczny transport. Identyfikatory połączeń, strumienie, kontrola przepływu, migracja, walidacja adresu, Retry, reset stateless, parametry transportu i zachowanie przy zamykaniu tworzą podstawę transportu HTTP/3 w Webship.
- RFC 9001 — Używanie TLS do zabezpieczenia QUIC. Początkowe sekrety, ochrona pakietów, ochrona nagłówka, integralność Retry, fazy kluczy i integracja TLS podążają za zasadami QUIC-TLS.
- RFC 9002 — Wykrywanie utraty pakietów i kontrola przeciążenia w QUIC. Przestrzenie numerów pakietów, potwierdzenia, PTO, wykrywanie utraty, odzyskiwanie i rozliczanie przeciążenia wpływają na niezawodność transportu.
- RFC 9221 — Nierzetelne rozszerzenie datagramów dla QUIC. Negocjowane ramki DATAGRAM QUIC przenoszą nierzetelny ruch WebTransport bez przekształcania go w zawartość strumienia.
- RFC 9287 — Smarowanie bitu QUIC. Smarowanie bitu QUIC zmniejsza usztywnienie, jednocześnie zachowując bezpieczeństwo negocjacji.
- RFC 9308 — Zastosowanie protokołu transportowego QUIC. Domyślne ustawienia operacyjne, takie jak ograniczony czas bezczynności i wskazówki dotyczące wdrożenia, informują politykę transportową produkcji Webship.
- RFC 9369 — QUIC Wersja 2. Typy pakietów wersji 2, klucze początkowe, integralność Retry, aktualizacje kluczy i negocjacja wersji są implementowane wraz z QUIC w wersji 1.
- RFC 9438 — CUBIC dla szybkich i dalekosiężnych sieci. Obecny standard CUBIC reguluje kontroler przeciążenia CUBIC w Webship; BBR i NewReno pozostają wybieralne w zależności od wymagań obciążenia pracy.
TLS, certyfikaty i automatyczne zarządzanie certyfikatami
- RFC 3339 — Data i czas w Internecie: znaczniki czasu. Okna odnowienia ACME używają interoperacyjnych znaczników czasu Internetu.
- RFC 4648 — Kodowania danych Base16, Base32 i Base64. Wartości ACME JOSE oraz materiały do uzgadniania połączenia WebSocket używają wymaganych alfabetów Base64 i Base64url oraz zasad dopełniania.
- RFC 5280 — Profil certyfikatu i CRL X.509 PKI w Internecie. Analiza certyfikatów i generowane certyfikaty wyzwań używają prawidłowych form DNS i binarnych IP w polu subjectAltName.
- RFC 5869 — Funkcja wyprowadzania klucza oparta na HMAC (HKDF). Wyprowadzanie klucza HKDF-SHA-256 i HKDF-SHA-384, wraz z ograniczeniami wyjściowymi, stanowi podstawę kluczy TLS i QUIC.
- RFC 6066 — Rozszerzenia TLS. SNI wybiera tożsamości DNS, podczas gdy dosłowne adresy IP są prawidłowo wyłączone z zwykłej formy HostName.
- RFC 7301 — Negocjacja protokołu warstwy aplikacji TLS (ALPN). ALPN wybiera HTTP/1.1, HTTP/2, HTTP/3 oraz izolowany protokół wyzwania ACME na granicy TLS.
- RFC 7638 — Odcisk palca klucza JSON Web Key. Odciski palców klucza konta ACME są wyprowadzane w kanonicznej formie JWK.
- RFC 7807 — Szczegóły problemu dla API HTTP. Webship korzysta z formatu dokumentów problemów wymaganego przez serwery ACME zgodnie z RFC 8555. Nowsza specyfikacja Szczegółów problemu zastępuje ją dla nowych, ogólnego przeznaczenia API, ale normatywna zależność ACME pozostaje wyraźna.
- RFC 8446 — TLS 1.3. Webship używa TLS 1.3 dla publicznego TLS, w tym dla biletów sesji, aktualizacji kluczy, powiadomień, polityki wczesnych danych i wyprowadzenia kluczy QUIC.
- RFC 8555 — Automatyczne Środowisko Zarządzania Certyfikatami. Konta, zamówienia, autoryzacje, wyzwania, finalizacja, pobieranie certyfikatów i procesy odnawiania są zautomatyzowane przy obsłudze ograniczonych danych wejściowych.
- RFC 8737 — Wyzwanie ACME TLS-ALPN-01. Ścieżka TLS przeznaczona wyłącznie do wyzwań negocjuje tylko acme-tls/1 i udostępnia wymaganą krytyczną rozszerzenie certyfikatu acmeIdentifier.
- RFC 8738 — Rozszerzenie walidacji identyfikatora IP ACME. Webship obsługuje zamówienia na certyfikaty IPv4 i IPv6, binarne SAN-y IP oraz SNI na podstawie adresu odwrotnego dla walidacji IP TLS-ALPN-01.
- RFC 9525 — Tożsamość usługi w TLS. Nazwy DNS i tożsamości IP są dopasowywane zgodnie z aktualnymi zasadami tożsamości usług, bez użycia symboli wieloznacznych ani skrótów nazwy zwykłej dla adresów IP.
- RFC 9773 — Rozszerzenie informacji o odnowieniu ACME. Okna odnowienia mogą pochodzić od CA, co pozwala Webship bezpiecznie rozkładać odnowienia zamiast korzystać z jednego sztywnego lokalnego harmonogramu.
WebTransport: precyzyjnie o tym, co jest standaryzowane
WebTransport przez HTTP/3 nie jest liczony jako pięćdziesiąty trzeci RFC. Od wersji Webship 1.3.1 jego mapowanie w warstwie transmisji pozostaje w wersji draft-ietf-webtrans-http3-16. Webship implementuje ten draft na bazie standaryzowanego HTTP/3, rozszerzonego CONNECT, QUIC DATAGRAM, HTTP Datagram oraz wymienionych powyżej warstw Capsule. Implementuje również negocjowane rozszerzenie RESET_STREAM_AT wymagane do zachowania niezawodnego prefiksu identyfikującego sesję, gdy strumień WebTransport jest resetowany.
To rozróżnienie ma znaczenie. Zgodność ze standardami nie poprawia się przez nazywanie projektu RFC. Poprawia się przez ścisłe śledzenie projektu, izolowanie go od zwykłych ścieżek HTTP, negocjowanie każdego rozszerzenia, ograniczanie każdego zasobu sesji i testowanie zachowania przy anulowaniu i awarii.
Dlaczego ta szerokość ma znaczenie w produkcji
Błąd standardu rzadko występuje izolowanie. Nieprawidłowe obsługiwanie HSTS może przekroczyć granicę pamięci podręcznej. Nieprawidłowa instrukcja QPACK może zakończyć niezwiązane żądania. Niebezpieczne założenie dotyczące wczesnych danych może powtórzyć operację. Klucz pamięci podręcznej QUERY, który pomija ciało żądania, może zwrócić wynik innego zapytania. Proxy, które usuwa trailerów lub nieprawidłowo obsługuje anulowanie, może cicho zmienić protokół aplikacji.
Architektura Webship traktuje te kwestie jako powiązane zagadnienia. Limity parsera, inspekcja bezpieczeństwa, caching, reverse proxy, stan transportu i instrumentacja dzielą wyraźne kontrakty. Efektem jest jeden serwer, który może przechodzić między HTTP/1.1, HTTP/2, HTTP/3, dostarczaniem statycznym, reverse proxy, streamowaniem i WebTransport bez nadawania każdemu trybowi innej definicji poprawności.
Zweryfikuj twierdzenie
Nie przyjmuj wzmocnionej formy na słowo. Przeczytaj [dokumentację Webship 1.3.1](/docs/1.3.1), sprawdź konfigurację i granice protokołu oraz odtwórz opublikowane zachowanie. Następnie [pobierz Webship](/downloads) i przetestuj przypadki graniczne, które mają znaczenie dla twojego systemu.