Ανάλυση των κεφαλίδων HTTP Connection ως διακριτών με κόμμα στοιχείων
Αναλύστε κάθε επιλογή Connection χωρίς διάκριση πεζών-κεφαλαίων όταν ένας forward proxy συναντά keep-alive και Upgrade στο ίδιο πεδίο HTTP/1.1.
Αυτές οι τιμές δεν είναι ανταγωνιστικές γραφές μιας μόνο λειτουργίας:
Connection: Upgrade
Connection: keep-alive, UpgradeΗ δεύτερη απαριθμεί δύο επιλογές σύνδεσης. Το HTTP ορίζει το Connection ως λίστα χωρισμένη με κόμμα, με ονόματα επιλογών που δεν διακρίνουν πεζά και κεφαλαία. Κώδικας που συγκρίνει ολόκληρη την τιμή με το ακριβές κείμενο Upgrade χάνει μια έγκυρη λίστα που περιέχει αυτή την επιλογή.
Για τη συνήθη προώθηση, ένας διαμεσολαβητής HTTP αναλύει το εισερχόμενο πεδίο, αφαιρεί τα πεδία που ονομάζουν οι επιλογές του, και μετά αφαιρεί το ίδιο το Connection ή το αντικαθιστά με τις δικές του επιλογές ελέγχου για τη σύνδεση προς τα εμπρός.
Η αφαίρεση μόνο ενός σκληροκωδικοποιημένου πεδίου Keep-Alive δεν αρκεί. Ένα μήνυμα μπορεί να ονομάζει στη λίστα ένα άλλο πεδίο ειδικό για τη σύνδεση, και αυτό το πεδίο δεν πρέπει να διαρρέει στη συνήθη προώθηση.
Η υποστήριξη αναβάθμισης πρωτοκόλλου απαιτεί σκόπιμο χειρισμό των δύο συνδέσεων και του νέου πρωτοκόλλου. Η τυφλή αντιγραφή των εισερχόμενων κεφαλίδων Upgrade δεν είναι υλοποίηση αυτής της παράδοσης.
Όταν ένα πρόγραμμα περιήγησης λειτουργεί και ένα άλλο αποτυγχάνει, συγκρίνετε τις πραγματικές τιμές πεδίων και στις δύο πλευρές του διαμεσολαβητή. Μια διαφορά ανάμεσα σε ένα στοιχείο και σε λίστα δύο στοιχείων μπορεί να αποκαλύψει σφάλμα ανάλυσης χωρίς να χρειάζεται το πρόγραμμα περιήγησης να μιμηθεί την ακριβή μορφοποίηση άλλου.
Αυτό αφορά τα μηνύματα HTTP που αναλύει ο proxy. Μια συνήθης σήραγγα HTTPS CONNECT δεν εκθέτει το πεδίο Connection της κρυπτογραφημένης ιστοσελίδας σε αυτόν τον proxy.