Επιστροφή στο Webship blog

Webship μηχανική

Webship: Ο Πιο Συμβατός με το RFC Διακομιστής Ιστού στον Κόσμο

Το Webship μετατρέπει τις απαιτήσεις RFC σε σαφείς συμπεριφορές σε HTTP/1.1, HTTP/2, HTTP/3, QUIC, TLS, caching, reverse proxying, WebTransport, ACME και τη νέα μέθοδο QUERY. Εξερευνήστε τον πλήρη χάρτη προτύπων 52-RFC.

Ο ιστός διατηρείται ενωμένος μέσω ακριβών συμφωνιών. Ένα πεδίο Content-Length πρέπει να σημαίνει το ίδιο σε κάθε διαδρομή. Μια cache δεν πρέπει να επαναχρησιμοποιεί μια απάντηση που απαιτεί επικύρωση. Μια κακώς μορφοποιημένη ενότητα πεδίων HTTP/3 πρέπει να αποτύχει στο σωστό εύρος. Μια ασφαλής μέθοδος πρέπει να παραμένει ασφαλής αφού περάσει από έναν αντίστροφο διακομιστή μεσολάβησης.

Το Webship 1.3.1 βασίζεται σε έναν κανόνα: η ταχύτητα έχει σημασία μόνο όταν τα bytes διατηρούν το νόημά τους.

Αυτός είναι ο λόγος για τον οποίο περιγράφουμε το Webship ως τον πιο συμβατό με RFC διακομιστή ιστού γενικής χρήσης στον κόσμο. Αυτός είναι ένας ισχυρισμός μηχανικής με ορατό όριο, όχι ένας ισχυρισμός ότι υπάρχει κάθε προαιρετικό χαρακτηριστικό σε κάθε RFC. Ο παρακάτω χάρτης ονομάζει τα 52 RFC που επηρεάζουν την ενεργή συμπεριφορά διακομιστή του Webship ή τα ιδιόκτητα θεμέλια πρωτοκόλλου του. Τα τρέχοντα πρότυπα έρχονται πρώτα. Τα έγγραφα που αντικαθίστανται προσδιορίζονται ως γενεαλογία συμβατότητας. Οι πρόχειρες προδιαγραφές δεν επισημαίνονται εκ νέου ως RFC.

Η συμβατότητα είναι συμπεριφορά, όχι σήμα

Η Webship εφαρμόζει πρότυπα στις περιοχές όπου οι διακομιστές παραγωγής συχνά γίνονται ασαφείς:

  • Η διαμόρφωση HTTP/1.1 απορρίπτει αντικρουόμενα μήκη, μη έγκυρους κωδικούς μεταφοράς, υπερμεγέθη αιτήματα στόχους, κακώς διαμορφωμένα κομμάτια και μορφές μεταφοράς αιτήματος-smuggling.
  • Το HTTP/2 και το HTTP/3 απορρίπτουν απαγορευμένα πεδία σύνδεσης, επαληθεύουν τα ψευδο-πεδία, περιορίζουν τα συμπιεσμένα τμήματα πεδίων και διατηρούν τα σφάλματα ροής ξεχωριστά από τα σφάλματα σύνδεσης.
  • Τα στατικά αρχεία διατηρούν τη σημασιολογία του HEAD, τους επικυρωτές, τη σειρά των προϋποθέσεων, τα εύρη bytes, τις ανακατευθύνσεις και τους τύπους περιεχομένου.
  • Ο αντίστροφος διακομιστής μεσολάβησης διατηρεί το framing, την ακύρωση, τα trailers, τις αναβαθμίσεις, τις ασφαλείς επαναλήψεις και την προώθηση ταυτότητας, ενώ αφαιρεί πεδία hop-by-hop.
  • Η προσωρινή μνήμη υπολογίζει κανόνες ηλικίας, φρεσκάδας, επαλήθευσης, Vary, ακύρωσης και χρήσης ληγμένου περιεχομένου αντί να αντιμετωπίζει την αποθήκευση ως συντόμευση κλειδιού-τιμής.
  • Το TLS, το QUIC, το ACME, τα πρώιμα δεδομένα και το WebTransport χρησιμοποιούν περιορισμένη κατάσταση και ρητή πολιτική αποτυχίας.

Οι ίδιες κανόνες ισχύουν στην ταχεία διαδρομή. Το Webship δεν ορίζει μία «σωστή» διαδρομή και μια διαφορετική διαδρομή αναφοράς.

Σημασιολογία HTTP, πλαισίωση, προσωρινή αποθήκευση και διαμεσολάβηση

  • RFC 3986 — Ομοιόμορφος Αναγνωριστής Πόρου (URI): Γενική Σύνταξη. Το Webship κανονικοποιεί τις σχετικές αναφορές Location και Content-Location, συμπεριλαμβανομένων των τμημάτων με τελείες, πριν τις αποφάσεις αχρήστευσης της προσωρινής μνήμης.
  • RFC 6455 — Το Πρωτόκολλο WebSocket. Οι αναβαθμίσεις μέσω reverse-proxy επικυρώνουν το κλειδί WebSocket, την αποδεκτή τιμή, το υποπρωτόκολλο, τις επεκτάσεις και τη μετάβαση της σήραγγας.
  • RFC 6585 — Πρόσθετοι Κωδικοί Κατάστασης HTTP. Πεδία αιτήματος υπερβολικού μεγέθους χρησιμοποιούν τον καθορισμένο κωδικό 431 όταν μια απάντηση HTTP εξακολουθεί να είναι δυνατή.
  • RFC 6797 — HTTP Strict Transport Security. Το Strict-Transport-Security αποστέλλεται μόνο μέσω ασφαλούς μεταφοράς και ποτέ δεν διαρρέει από μια ουδέτερη προς τη μεταφορά καταχώρηση cache σε καθαρό HTTP.
  • RFC 7235 — HTTP/1.1 Authentication. Τα tokens του σχήματος αυθεντικοποίησης αναλύονται χωρίς ευαισθησία σε πεζά-κεφαλαία, συμπεριλαμβανομένης της προστατευμένης επιφάνειας ελέγχου MCP. Η γενική σημασιολογία HTTP ζει τώρα στο RFC 9110.
  • RFC 7239 — Επέκταση HTTP Forwarded. Οι χειριστές μπορούν να επιλέξουν ένα πεδίο Forwarded βασισμένο σε πρότυπα, παλαιά πεδία X-Forwarded, και τα δύο ή κανένα· τα μη αξιόπιστα εισερχόμενα πεδία ταυτότητας αφαιρούνται πρώτα.
  • RFC 7540 — HTTP/2. Αυτό διατηρείται ως γραμμή συμβατότητας με το HTTP/2· η ενεργή σύμβαση HTTP/2 είναι ο διάδοχός της, RFC 9113.
  • RFC 7541 — HPACK: Συμπίεση κεφαλίδων για HTTP/2. Το στοίβα HTTP/2 της Webship περιορίζει την κατάσταση του αποκωδικοποιητή και τους πίνακες του κωδικοποιητή διατηρώντας ταυτόχρονα τη μορφή καλωδίου HPACK και την κωδικοποίηση Huffman.
  • RFC 7838 — Εναλλακτικές Υπηρεσίες HTTP. Το Alt-Svc διαφημίζει ένα endpoint HTTP/3 χωρίς να αλλάζει την προέλευση που αντιπροσωπεύεται από το URL.
  • RFC 8441 — Εκκίνηση των WebSockets με HTTP/2. Το Webship υποστηρίζει το θεμέλιο διαπραγμάτευσης extended-CONNECT downstream. Δεν προσποιείται ότι ένα upstream HTTP/1.1 υλοποιεί extended CONNECT του HTTP/2· οι μη υποστηριζόμενοι συνδυασμοί upstream αποτυγχάνουν ρητά.
  • RFC 8470 — Χρήση Πρόωρων Δεδομένων στο HTTP. Οι πρόωρες αιτήσεις που η Webship δεν θα επεξεργαστεί λαμβάνουν 425 Too Early αντί να διεκπεραιώνονται με επικίνδυνες υποθέσεις επανάληψης.
  • RFC 8941 — Δομημένες Τιμές Πεδίων για HTTP. Οι τιμές προτεραιότητας HTTP χρησιμοποιούν ανάλυση λεξικού δομημένων πεδίων· τα σφάλματα στα προαιρετικά πεδία αγνοούνται στο σύνολό τους.
  • RFC 9110 — Ορολογία HTTP. Μέθοδοι, κωδικοί κατάστασης, πεδία, επικυρωτές, προϋποθέσεις, ανακατευθύνσεις, μεταδεδομένα περιεχομένου, HEAD, CONNECT, OPTIONS και ορολογία εύρους μοιράζονται ένα τρέχον συμβόλαιο μεταξύ των εκδόσεων του πρωτοκόλλου.
  • RFC 9111 — HTTP Caching. Το Webship υλοποιεί διορθωμένη ηλικία, ρητή φρεσκάδα, Vary, only-if-cached, must-revalidate, proxy-revalidate, ασφαλή χρήση ληγμένων δεδομένων και ακύρωση αποτελεσματικών και σχετικών URIs.
  • RFC 9112 — HTTP/1.1. Οι κανόνες για τη γραμμή αιτήματος, το πεδίο, το μήκος σώματος, την κωδικοποίηση μεταφοράς, το κομμάτι δεδομένων, το επίλογο, τη διατήρηση και το κλείσιμο επιβάλλονται πριν από την αποστολή στην εφαρμογή.
  • RFC 9113 — HTTP/2. Η σειρά των ψευδο-πεδίων, η εξουσιοδότηση, τα απαγορευμένα πεδία σύνδεσης, οι περιορισμοί TE, ο κύκλος ζωής του ρεύματος, ο έλεγχος ροής, το GOAWAY και το πεδίο σφαλμάτων διαχειρίζονται από τη διαδρομή H2 που ανήκει στο Webship.
  • RFC 9114 — HTTP/3. Η Webship κατέχει τα μονοπάτια request, control-stream, SETTINGS, critical-stream, ακύρωσης και stream-versus-connection σφαλμάτων που χρησιμοποιούνται από τον HTTP/3 server της.
  • RFC 9204 — QPACK: Συμπίεση πεδίων για HTTP/3. Η χωρητικότητα του δυναμικού πίνακα περιορίζεται από το δηλωμένο όριο, οι ροές εντολών παραμένουν ανιχνεύσιμες σε μηδενική χωρητικότητα, και η άκυρη κατάσταση γίνεται το απαιτούμενο σφάλμα QPACK.
  • RFC 9218 — Επεκτάσιμο Σχέδιο Ιεράρχησης για HTTP. Ο οδηγός επείγοντος και βαθμιαίας παράδοσης κατευθύνει τον προγραμματισμό του HTTP/3 ενώ οι άγνωστες παράμετροι προτεραιότητας παραμένουν επεκτάσιμες.
  • RFC 9220 — Εκκίνηση WebSockets με HTTP/3. Το Webship υλοποιεί το θεμέλιο HTTP/3 extended-CONNECT SETTINGS που χρησιμοποιείται από τα σύγχρονα πρωτόκολλα σε τούνελ· αυτό δεν υποδηλώνει ότι γίνεται αποδοχή κάθε πιθανού πρωτοκόλλου CONNECT.
  • RFC 9297 — HTTP Δεδομένα και το Πρωτόκολλο Κάψουλας. Οι συνεδρίες WebTransport χρησιμοποιούν περιορισμένη αποκωδικοποίηση κάψουλας και σύνδεση HTTP Datagram, με άγνωστες κάψουλες να αντιμετωπίζονται ως σημεία επέκτασης αντί για σφάλματα ανάλυσης.
  • RFC 9421 — Υπογραφές Μηνυμάτων HTTP. Προαιρετική επαλήθευση προέλευσης ανταπόκρισης Ed25519 μπορεί να καλύψει την ταυτότητα έκδοσης και διαμόρφωσης του Webship χωρίς να αντικαθιστά το TLS ή την αυθεντικοποίηση εφαρμογής.
  • RFC 10008 — Η μέθοδος HTTP QUERY. Το Webship θεωρεί το QUERY ασφαλές και αμετάβλητο, διατηρεί το σώμα του κατά τη διέλευση μέσω διαμεσολαβητή, περιλαμβάνει τα μεταδεδομένα σώματος και αναπαράστασης στην ταυτότητα της μνήμης cache, απαγορεύει την εικονική φρεσκάδα, υποστηρίζει προαιρετική και περιορισμένη συμπεριφορά, και ποτέ δεν ακυρώνει μια μνήμη cache απλώς επειδή χρησιμοποιήθηκε το QUERY.

Μέσο μεταφοράς QUIC και έλεγχος συμφόρησης

TLS, πιστοποιητικά και αυτόματη διαχείριση πιστοποιητικών

WebTransport: ακριβές σχετικά με το τι είναι τυποποιημένο

Το WebTransport μέσω HTTP/3 δεν θεωρείται ως πεντηκοστό τρίτο RFC. Από την έκδοση Webship 1.3.1, η χαρτογράφηση του στα δεδομένα παραμένει στο draft-ietf-webtrans-http3-16. Το Webship υλοποιεί αυτό το προσχέδιο πάνω από το τυποποιημένο HTTP/3, επεκταμένο CONNECT, QUIC DATAGRAM, HTTP Datagram και τα στρώματα Capsule που αναφέρονται παραπάνω. Υλοποιεί επίσης την επεκτάση RESET_STREAM_AT που έχει συμφωνηθεί και απαιτείται για τη διατήρηση ενός αξιόπιστου προθέματος αναγνώρισης συνεδρίας όταν ένας ροή WebTransport επαναρυθμίζεται.

Αυτή η διάκριση έχει σημασία. Η συμβατότητα με τα πρότυπα δεν βελτιώνεται με το να ονομάσουμε ένα σχέδιο RFC. Βελτιώνεται με την ρητή παρακολούθηση του σχεδίου, την απομόνωσή του από τα κανονικά μονοπάτια HTTP, την διαπραγμάτευση κάθε επέκτασης, τον περιορισμό κάθε πόρου συνεδρίας και τη δοκιμή της συμπεριφοράς ακύρωσης και αποτυχίας.

Γιατί έχει σημασία αυτή η έκταση στην παραγωγή

Ένα σφάλμα στα πρότυπα σπάνια είναι απομονωμένο. Η λανθασμένη διαχείριση HSTS μπορεί να διασχίσει ένα όριο προσωρινής μνήμης. Μια κακώς μορφοποιημένη εντολή QPACK μπορεί να τερματίσει άσχετα αιτήματα. Μια μη ασφαλής υπόθεση για δεδομένα πρώιμου σταδίου μπορεί να επαναλάβει μια λειτουργία. Ένα κλειδί προσωρινής μνήμης QUERY που παραλείπει το σώμα του αιτήματος μπορεί να επιστρέψει το αποτέλεσμα ενός διαφορετικού ερωτήματος. Ένα διακομιστής μεσολάβησης που αφαιρεί επεκτάσεις ή χειρίζεται λανθασμένα την ακύρωση μπορεί να αλλάξει αθόρυβα ένα πρωτόκολλο εφαρμογής.

Η αρχιτεκτονική του Webship αντιμετωπίζει αυτά ως συνδεδεμένα ζητήματα. Τα όρια του parser, ο έλεγχος ασφαλείας, η προσωρινή αποθήκευση, η αντιστροφή αντιπροσωπείας, η κατάσταση μεταφοράς και η εργαλειοποίηση μοιράζονται ρητές συμφωνίες. Το αποτέλεσμα είναι ένας διακομιστής που μπορεί να μετακινηθεί μεταξύ HTTP/1.1, HTTP/2, HTTP/3, στατικής παράδοσης, αντιστροφής αντιπροσωπείας, ροής και WebTransport χωρίς να δίνει σε κάθε λειτουργία διαφορετικό ορισμό ορθότητας.

Επαλήθευσε τον ισχυρισμό

Μην παίρνετε ένα υπερθετικό στην εμπιστοσύνη. Διαβάστε την [τεκμηρίωση Webship 1.3.1](/docs/1.3.1), ελέγξτε τις ρυθμίσεις και τα όρια του πρωτοκόλλου και αναπαράγετε τη δημοσιευμένη συμπεριφορά. Έπειτα, [κατεβάστε το Webship](/downloads) και δοκιμάστε τις ακραίες περιπτώσεις που είναι σημαντικές για το σύστημά σας.