Οδηγίες κεφαλίδων HTTP
Οι κεφαλίδες αποτελούν πολύ σημαντικό μέρος της επεξεργασίας αιτημάτων HTTP.
Οι κεφαλίδες αποτελούν πολύ σημαντικό μέρος της επεξεργασίας αιτημάτων HTTP, και η καθεμία έχει τη δική της σημασιολογία και τα δικά της ζητήματα προς εξέταση. Οι περισσότερες κεφαλίδες προωθούνται από προεπιλογή, ωστόσο ορισμένες που χρησιμοποιούνται για τον έλεγχο του τρόπου παράδοσης του αιτήματος προσαρμόζονται αυτόματα ή αφαιρούνται από τον διακομιστή μεσολάβησης. Οι συνδέσεις μεταξύ του client και του διακομιστή μεσολάβησης, και μεταξύ του διακομιστή μεσολάβησης και του προορισμού, είναι ανεξάρτητες μεταξύ τους. Επομένως, οι κεφαλίδες που επηρεάζουν τη σύνδεση και τη μεταφορά πρέπει να φιλτράρονται. Πολλές κεφαλίδες περιέχουν πληροφορίες όπως ονόματα domain, διαδρομές ή άλλες λεπτομέρειες που μπορεί να επηρεαστούν όταν ένας αντίστροφος διακομιστής μεσολάβησης εντάσσεται στην αρχιτεκτονική της εφαρμογής. Ακολουθεί μια συλλογή οδηγιών σχετικά με το πώς μπορεί να επηρεαστούν συγκεκριμένες κεφαλίδες και τι πρέπει να κάνετε σε κάθε περίπτωση.
Φιλτράρισμα κεφαλίδων στο YARP
Το YARP αφαιρεί αυτόματα κεφαλίδες αιτήματος και απόκρισης που θα μπορούσαν να επηρεάσουν την ικανότητά του να προωθήσει σωστά ένα αίτημα, ή που θα μπορούσαν να χρησιμοποιηθούν κακόβουλα για την παράκαμψη λειτουργιών του διακομιστή μεσολάβησης. Μια πλήρης λίστα είναι διαθέσιμη εδώ, ενώ ορισμένα σημαντικά σημεία περιγράφονται παρακάτω.
Connection, KeepAlive, Close
Αυτές οι κεφαλίδες ελέγχουν τον τρόπο διαχείρισης της σύνδεσης TCP και αφαιρούνται για να μην επηρεάζουν τη σύνδεση στην άλλη πλευρά του διακομιστή μεσολάβησης.
Transfer-Encoding
Αυτή η κεφαλίδα περιγράφει τη μορφή του σώματος του αιτήματος ή της απόκρισης πάνω στη σύνδεση (π.χ. «chunked») και αφαιρείται επειδή η μορφή μπορεί να διαφέρει μεταξύ της εσωτερικής και της εξωτερικής σύνδεσης. Οι στοίβες HTTP εισερχόμενων και εξερχόμενων συνδέσεων θα προσθέσουν τις κεφαλίδες μεταφοράς όπως απαιτείται.
TE
Μόνο η τιμή κεφαλίδας TE: trailers επιτρέπεται να περάσει από τον διακομιστή μεσολάβησης, καθώς απαιτείται από ορισμένες υλοποιήσεις gRPC.
Upgrade
Αυτή χρησιμοποιείται για πρωτόκολλα όπως το WebSockets. Αφαιρείται από προεπιλογή και προστίθεται ξανά μόνο για τα ρητά υποστηριζόμενα πρωτόκολλα (WebSockets, SPDY).
Proxy-*
Πρόκειται για κεφαλίδες που χρησιμοποιούνται με διακομιστές μεσολάβησης και δεν θεωρείται κατάλληλο να προωθούνται.
Alt-Svc
Αυτή η κεφαλίδα απόκρισης χρησιμοποιείται με αναβαθμίσεις σε HTTP/3 και ισχύει μόνο για την άμεση σύνδεση.
Κεφαλίδες κατανεμημένης ιχνηλάτησης
Σε αυτές τις κεφαλίδες περιλαμβάνονται οι TraceParent, Request-Id, TraceState, Baggage και Correlation-Context.
Αφαιρούνται αυτόματα με βάση το DistributedContextPropagator.Fields, επιτρέποντας στο HttpClient που εκτελεί την προώθηση να τις αντικαταστήσει με ενημερωμένες τιμές.
Μπορείτε να εξαιρεθείτε από την τροποποίηση αυτών των κεφαλίδων ορίζοντας το SocketsHttpHandler.ActivityHeadersPropagator σε null:
C# services.AddReverseProxy()
.ConfigureHttpClient((_, handler) => handler.ActivityHeadersPropagator =
null);Strict-Transport-Security
Αυτή η κεφαλίδα δίνει εντολή στους clients να χρησιμοποιούν πάντα HTTPS, όμως μπορεί να υπάρξει σύγκρουση μεταξύ των τιμών που παρέχονται από τον διακομιστή μεσολάβησης και από τον προορισμό. Για να αποφευχθεί η σύγχυση, η τιμή του προορισμού δεν αντιγράφεται στην απόκριση αν έχει ήδη προστεθεί μια τιμή στην απόκριση από την εφαρμογή του διακομιστή μεσολάβησης.
Άλλες οδηγίες κεφαλίδων
Host
Η κεφαλίδα Host υποδεικνύει σε ποιον ιστότοπο του διακομιστή προορίζεται το αίτημα. Αυτή η κεφαλίδα αφαιρείται από προεπιλογή, καθώς το όνομα host που χρησιμοποιείται δημόσια από τον διακομιστή μεσολάβησης είναι πιθανό να διαφέρει από αυτό που χρησιμοποιεί η υπηρεσία πίσω από τον διακομιστή μεσολάβησης. Αυτό μπορεί να διαμορφωθεί χρησιμοποιώντας τον μετασχηματισμό RequestHeaderOriginalHost.
X-Forwarded-*, Forwarded
Επειδή χρησιμοποιείται ξεχωριστή σύνδεση για την επικοινωνία με τον προορισμό, αυτές οι κεφαλίδες αιτήματος μπορούν να χρησιμοποιηθούν για την προώθηση πληροφοριών σχετικά με την αρχική σύνδεση, όπως η IP, το σχήμα (scheme), η θύρα και το πιστοποιητικό client. Οι κεφαλίδες X-Forwarded-For, X-Forwarded-Proto, X-Forwarded-Host και X-Forwarded-Prefix είναι ενεργοποιημένες από προεπιλογή. Αυτές οι πληροφορίες είναι ευάλωτες σε επιθέσεις πλαστογράφησης (spoofing), γι' αυτό οποιεσδήποτε υπάρχουσες κεφαλίδες στο αίτημα αφαιρούνται και αντικαθίστανται από προεπιλογή. Η εφαρμογή προορισμού θα πρέπει να είναι προσεκτική ως προς το πόση εμπιστοσύνη δίνει σε αυτές τις τιμές. Δείτε τους μετασχηματισμούς για τη διαμόρφωσή τους στον διακομιστή μεσολάβησης. Για οδηγίες σχετικά με τη διαμόρφωση της εφαρμογής προορισμού ώστε να διαβάζει αυτές τις κεφαλίδες, δείτε το Configure ASP.NET Core to work with proxy servers and load balancers.
X-http-method-override, x-http-method, x-method-override
Ορισμένοι clients και διακομιστές περιορίζουν τις μεθόδους HTTP που επιτρέπουν (για παράδειγμα, μόνο GET). Αυτές οι κεφαλίδες αιτήματος χρησιμοποιούνται μερικές φορές για την παράκαμψη αυτών των περιορισμών. Αυτές οι κεφαλίδες προωθούνται από προεπιλογή. Αν θέλετε να αποτρέψετε αυτές τις παρακάμψεις στον διακομιστή μεσολάβησης, χρησιμοποιήστε τον μετασχηματισμό RequestHeaderRemove.
Set-Cookie
Αυτή η κεφαλίδα απόκρισης μπορεί να περιέχει πεδία που περιορίζουν πτυχές του URL, όπως το σχήμα, το domain ή τη διαδρομή στα οποία πρέπει να χρησιμοποιείται το cookie. Η χρήση ενός αντίστροφου διακομιστή μεσολάβησης μπορεί να αλλάξει το πραγματικό σχήμα, domain ή διαδρομή ενός ιστότοπου, όπως αυτός φαίνεται δημόσια. Παρόλο που θα ήταν δυνατό να ξαναγραφούν οι κεφαλίδες απόκρισης cookie με προσαρμοσμένους μετασχηματισμούς, συνιστάται αντ' αυτού να χρησιμοποιούνται οι κεφαλίδες Forwarded που περιγράφηκαν παραπάνω, ώστε να μεταφέρονται οι σωστές τιμές στην εφαρμογή προορισμού και αυτή να μπορεί να δημιουργεί τις σωστές κεφαλίδες Set-Cookie.
Location
Αυτή η κεφαλίδα απόκρισης χρησιμοποιείται με ανακατευθύνσεις και μπορεί να περιέχει σχήμα, domain και διαδρομή που διαφέρουν από τις δημόσιες τιμές λόγω της χρήσης του διακομιστή μεσολάβησης. Παρόλο που θα ήταν δυνατό να ξαναγραφεί η κεφαλίδα Location με προσαρμοσμένους μετασχηματισμούς, συνιστάται αντ' αυτού να χρησιμοποιούνται οι κεφαλίδες Forwarded που περιγράφηκαν παραπάνω, ώστε να μεταφέρονται οι σωστές τιμές στην εφαρμογή προορισμού και αυτή να μπορεί να δημιουργεί τις σωστές κεφαλίδες Location.
Server
Αυτή η κεφαλίδα απόκρισης υποδεικνύει ποια τεχνολογία διακομιστή χρησιμοποιήθηκε για τη δημιουργία της απόκρισης (για παράδειγμα, IIS, Kestrel). Αυτή η κεφαλίδα προωθείται από τον προορισμό εξ ορισμού. Οι εφαρμογές που θέλουν να την αφαιρέσουν μπορούν να χρησιμοποιήσουν τον μετασχηματισμό ResponseHeaderRemove, οπότε θα χρησιμοποιηθεί η προεπιλεγμένη κεφαλίδα server του ίδιου του διακομιστή μεσολάβησης. Η καταστολή της προεπιλεγμένης κεφαλίδας server του διακομιστή μεσολάβησης εξαρτάται από τον συγκεκριμένο διακομιστή, όπως π.χ. στο Kestrel.
X-Powered-By
Αυτή η κεφαλίδα απόκρισης υποδεικνύει ποιο web framework χρησιμοποιήθηκε για τη δημιουργία της απόκρισης (για παράδειγμα, ASP.NET). Το ASP.NET Core δεν παράγει αυτή την κεφαλίδα, ωστόσο το IIS μπορεί να την παράγει. Αυτή η κεφαλίδα προωθείται από τον προορισμό εξ ορισμού. Οι εφαρμογές που θέλουν να την αφαιρέσουν μπορούν να χρησιμοποιήσουν τον μετασχηματισμό ResponseHeaderRemove.
Αυτό το άρθρο δημιουργήθηκε από τον συγγραφέα με τη βοήθεια τεχνητής νοημοσύνης (AI). Μάθετε περισσότερα