WebSockets & SPDY
Το YARP επιτρέπει την προώθηση συνδέσεων WebSocket και SPDY από προεπιλογή.
Προώθηση WebSockets και SPDY από το YARP
Εισαγωγή
Το YARP επιτρέπει την προώθηση συνδέσεων WebSocket και SPDY από προεπιλογή. Αυτή η υποστήριξη λειτουργεί τόσο με την απευθείας προώθηση όσο και με την πλήρη προσέγγιση pipeline.
Το WebSockets είναι ένα αμφίδρομο πρωτόκολλο ροής (streaming), χτισμένο πάνω στο HTTP/1.1 και αργότερα προσαρμοσμένο στο HTTP/2.
Το SPDY είναι ο πρόδρομος του HTTP/2 και χρησιμοποιείται συνήθως σε περιβάλλοντα Kubernetes.
Αναβαθμίσεις HTTP/1.1
Τα WebSockets και το SPDY είναι χτισμένα πάνω στο HTTP/1.1, χρησιμοποιώντας ένα χαρακτηριστικό που ονομάζεται αναβαθμίσεις σύνδεσης (connection upgrades). Το YARP προωθεί το αρχικό αίτημα και, αν ο διακομιστής προορισμού απαντήσει με 101 Switching Protocols, αναβαθμίζει τη σύνδεση σε μια αδιαφανή, αμφίδρομη ροή με χρήση του νέου πρωτοκόλλου. Το YARP δεν υποστηρίζει την αναβάθμιση σε άλλα πρωτόκολλα, όπως το HTTP/2, με αυτόν τον τρόπο.
HTTP/2
Το YARP υποστηρίζει τα WebSockets μέσω HTTP/2 από το .NET 7 και το YARP 2.0 και έπειτα. Το Kestrel είναι ο μόνος διαθέσιμος διακομιστής ASP.NET Core που δέχεται εισερχόμενα αιτήματα WebSocket μέσω HTTP/2, και αυτή η υποστήριξη είναι αυτόματα ενεργοποιημένη. Οι browsers μπορούν να εντοπίσουν αυτή την υποστήριξη όπως διαφημίζεται από τον διακομιστή και να μεταβούν αυτόματα σε HTTP/2.
Οι εκδόσεις πρωτοκόλλου εισερχόμενης και εξερχόμενης σύνδεσης δεν χρειάζεται να ταιριάζουν. Το εισερχόμενο αίτημα WebSocket μπορεί να είναι HTTP/1.1 ή HTTP/2. Δεν υπάρχει καμία ειδική διαμόρφωση για τα WebSockets στα εξερχόμενα αιτήματα· το YARP θα χρησιμοποιήσει τα Version και VersionPolicy του ForwarderRequestConfig για να καθορίσει την εξερχόμενη έκδοση που θα χρησιμοποιηθεί. Οι προεπιλεγμένες τιμές είναι HTTP/2 και RequestVersionOrLower.
Τα WebSockets απαιτούν διαφορετικές κεφαλίδες HTTP για το HTTP/2, οπότε το YARP θα προσθέτει και θα αφαιρεί αυτές τις κεφαλίδες όπως χρειάζεται κατά την προσαρμογή μεταξύ των διαφορετικών εκδόσεων.
Μετά την αρχική χειραψία, τα WebSockets λειτουργούν με τον ίδιο τρόπο και στις δύο εκδόσεις HTTP.
Χρονικό όριο (Timeout)
Τα Http Request Timeouts (.NET 8+) μπορούν να εφαρμόζουν χρονικά όρια σε όλα τα αιτήματα, είτε από προεπιλογή είτε μέσω πολιτικής.
Αυτά τα χρονικά όρια απενεργοποιούνται μετά από μια χειραψία WebSocket. Εξακολουθούν να ισχύουν για αιτήματα gRPC. Για πρόσθετη διαμόρφωση, δείτε το Timeouts.
Αυτό το άρθρο δημιουργήθηκε από τον συγγραφέα με τη βοήθεια τεχνητής νοημοσύνης (AI). Μάθετε περισσότερα