Το VPN έπεσε στη μέση της σελίδας: βγαίνουν ακόμη αιτήματα υποβάθρου;
Μια σελίδα που μένει ανοιχτή συνεχίζει να ρωτά, να επανασυνδέεται και να συγχρονίζεται αφού πεθάνει το τούνελ. Δείτε ποιες προσπάθειες βγαίνουν ακόμη και πώς να το αποδείξετε.
Η καρτέλα δείχνει ακόμη τον πίνακα ελέγχου από πριν πεθάνει το τούνελ. Οι αριθμοί κατάστασης παγώνουν, ένας μικρός δείκτης συνεχίζει να γυρίζει, και η γραμμή διευθύνσεων κρατά ακόμη την εφαρμογή που ανοίξατε πριν από μία ώρα. Δεν αγγίξατε τίποτα μετά τη διακοπή, κι όμως η σελίδα μπορεί ακόμη να προσπαθεί να φτάσει τον διακομιστή της με το δικό της πρόγραμμα. Αυτό είναι το κομμάτι που χάνουν οι άνθρωποι: μια σελίδα που είναι απλώς ορατή και μια σελίδα που στέλνει ακόμη αιτήματα φαίνονται ίδιες από έξω, και μόνο μία από τις δύο εμφανίζεται σε ένα αρχείο καταγραφής δικτύου.
Εργασία που ξεκινά μια σελίδα χωρίς εσάς
Τέσσερις μηχανισμοί κρατούν απασχολημένο ένα φορτωμένο έγγραφο. Ένα επαναλαμβανόμενο χρονόμετρο μπορεί να ξανατρέχει μια κλήση κατάστασης κάθε λίγα δευτερόλεπτα. Ένα fetch μπορεί να εκδηλωθεί όταν η καρτέλα γίνει ξανά ορατή αφού επιστρέψετε σε αυτήν. Ένα ζωντανό κανάλι χτισμένο σε WebSocket ή συμβάντα που στέλνει ο διακομιστής μπορεί να επιχειρήσει επανασύνδεση με το δικό του πρόγραμμα υποχώρησης. Ένας service worker που έχει καταχωρίσει ο ιστότοπος μπορεί να ξυπνήσει για έναν συγχρονισμό σε ουρά ακόμη και όταν δεν υπάρχει καρτέλα μπροστά σας.
Κανένα από αυτά δεν χρειάζεται κλικ, και κανένα δεν επαναφορτώνει το έγγραφο. Η γραμμή διευθύνσεων, η θέση κύλισης και οι τιμές που αποδίδονται μένουν όλα εκεί που ήταν. Αυτό που αλλάζει είναι μόνο η πλευρά του δικτύου: κάθε νέα προσπάθεια είναι μια φρέσκια απόφαση που λαμβάνεται τη στιγμή που αρχίζει.
Αυτή η διάκριση έχει σημασία επειδή η ορατή σελίδα αποθηκεύεται τοπικά. Τα pixel που έχουν ήδη ζωγραφιστεί δεν λένε τίποτα για το αν πέτυχε το επόμενο αίτημα. Ένα παγωμένο γράφημα με δείκτη είναι η συνηθισμένη όψη μιας σελίδας της οποίας τα αιτήματα αποτυγχάνουν τώρα. Το διάβασμα της οθόνης σας λέει τι είπε ο διακομιστής πριν από λεπτά, όχι τι κάνει ο περιηγητής τώρα.
Γιατί το προηγούμενο φόρτωμα της σελίδας δεν κρατά διαδρομή
Τίποτα στο φόρτωμα της σελίδας δεν δεσμεύει το έγγραφο στο τούνελ. Η δρομολόγηση επιλύεται ανά πακέτο, τη στιγμή της αποστολής, από τον πίνακα που υπάρχει όταν το πακέτο φεύγει. Όταν η διεπαφή του τούνελ εξαφανιστεί, αυτή η αναζήτηση δεν ταιριάζει πια με τη διαδρομή του τούνελ. Είτε πέφτει στον φυσικό προσαρμογέα είτε δεν βρίσκει τίποτα, ανάλογα με το τι άφησε πίσω ο πελάτης.
Οι επαναλαμβανόμενες επιστροφές κλήσεων είναι συνηθισμένες προγραμματισμένες εργασίες. Η ενότητα χρονομέτρων του προτύπου HTML περιγράφει πώς μπαίνουν σε ουρά και αντιμετωπίζει το διάστημα ως ελάχιστη καθυστέρηση παρά ως υπόσχεση ακριβούς ρυθμού, οπότε μια καρτέλα υποβάθρου μπορεί να ρωτά πολύ πιο σπάνια από ό,τι ζητά ο κώδικάς της. Λιγότερες προσπάθειες δεν είναι το ίδιο με καμία προσπάθεια, και το να φέρεις μια καρτέλα ξανά μπροστά είναι μια συνηθισμένη στιγμή για ένα ξέσπασμα από αυτές.
Πού προσγειώνεται η πολιτική αποτυχίας
Το μπλοκ του πελάτη αξιολογείται όταν επιχειρείται μια σύνδεση, όχι όταν ανακτήθηκε η σελίδα. Αν η συνήθης πρόσβαση επιτρέπεται ακόμη, η επανάληψη μπορεί να βγει πάνω από τον φυσικό σύνδεσμο χωρίς προστασία. Αν η πολιτική κρατά αυτή την κίνηση μέχρι να επιστρέψει το τούνελ, η προσπάθεια αποτυγχάνει τη στιγμή της σύνδεσης και η σελίδα δείχνει ένα σφάλμα που μπορεί να ξαναδοκιμάσει λίγα δευτερόλεπτα αργότερα.
Δύο λεπτομέρειες καθορίζουν ποιο από αυτά θα πάρετε. Η πρώτη είναι το εύρος επιβολής που υποστηρίζει ο πελάτης: μπλοκ για ολόκληρη τη συσκευή, μπλοκ περιορισμένο στον προσαρμογέα του τούνελ ή σύνολο κανόνων με εξαιρέσεις. Η δεύτερη είναι αν ο προορισμός πέφτει μέσα σε μια εξαίρεση που προσθέσατε νωρίτερα για έναν τοπικό εκτυπωτή, μια αιχμάλωτη πύλη ή μια υπηρεσία ροής.
Η κρυπτογράφηση σε επίπεδο εφαρμογής δεν αλλάζει τίποτα από αυτά. Το HTTPS προστατεύει τα byte μεταξύ περιηγητή και διακομιστή· δεν λέει τίποτα για το ποια διεπαφή τα μεταφέρει. Μια σελίδα μπορεί να είναι τέλεια κρυπτογραφημένη και να βγαίνει ακόμη από τη λάθος διαδρομή, και αυτό ακριβώς επιτρέπει ένα στενό μπλοκ.
Έλεγχος με μια αναλώσιμη σελίδα
Χρησιμοποιήστε έναν κεντρικό υπολογιστή που ελέγχετε και μια σελίδα που δεν κάνει τίποτα άλλο παρά να τον καλεί, ώστε να μην παίζονται πραγματικά δεδομένα. Από ένα τερματικό, πάρτε δείγμα της διαδρομής πριν και μετά τη διακοπή:
curl -sS --max-time 5 -o /dev/null -w '%{http_code} %{remote_ip}\n' https://probe.example.net/pingΕκτελέστε το με το τούνελ ανεβασμένο, μετά κατεβάστε το τούνελ και εκτελέστε το ξανά. Μια απάντηση από δημόσια διεύθυνση όσο το τούνελ είναι κατεβασμένο σας λέει ότι η άμεση διαδρομή είναι ανοιχτή. Μια λήξη χρόνου ή μια απορριφθείσα σύνδεση σας λέει ότι η πολιτική κρατά. Επαναλάβετε μία ακόμη φορά αφού ο πελάτης επανασυνδεθεί, ώστε να δείτε τη διαδρομή του τούνελ να επιστρέφει αντί να υποθέσετε ότι το έκανε.
Στον περιηγητή, ο πίνακας Δίκτυο χωρίζει τις δύο ερωτήσεις. Φιλτράρετε σε Fetch/XHR και μετά διαβάστε τη στήλη εκκινητή: μια καταχώριση που ξεκίνησε από χρονόμετρο ή σενάριο, χωρίς καταγεγραμμένη πλοήγηση πριν από αυτήν, είναι προσπάθεια υποβάθρου και όχι επαναφόρτωση. Συγκρίνετε την ώρα έναρξής της με τη στιγμή που έπεσε το τούνελ. Αν η καταχώριση είναι ακόμη σε εκκρεμότητα όταν το τούνελ έχει φύγει, το αίτημα περιμένει μια διαδρομή που δεν υπάρχει πια.
Τα στοιχεία από την πλευρά του διακομιστή είναι ισχυρότερα από ό,τι δείχνει ο περιηγητής. Ένα αρχείο καταγραφής αιτημάτων με χρονική σήμανση και διεύθυνση προέλευσης αποδεικνύει ότι το πακέτο έφτασε. Οι καταχωρίσεις του περιηγητή μπορούν να φέρουν cookies, διακριτικά και πλήρεις διευθύνσεις URL, οπότε κρατήστε μόνο τα πεδία που χρειάζεται η ερώτησή σας και αποκρύψτε τα υπόλοιπα πριν τα επικολλήσετε οπουδήποτε.
Τι να κάνετε με την απάντηση
Αν οι προσπάθειες υποβάθρου συνεχίζουν να πετυχαίνουν όσο το τούνελ είναι κατεβασμένο, το μπλοκ είναι στενότερο από ό,τι υποθέσατε, και αυτό το κενό αξίζει να κλείσει πριν εμπιστευτείτε τον πελάτη για ευαίσθητη εργασία. Αν αποτυγχάνουν, η πολιτική κάνει τη δουλειά της και η παγωμένη σελίδα είναι καλλωπιστική. Όπως και να έχει, το κλείσιμο μιας καρτέλας δεν είναι έλεγχος σε επίπεδο συσκευής: άλλες καρτέλες, άλλοι περιηγητές και άλλες εφαρμογές προγραμματίζουν το καθένα τη δική του εργασία.
Επόμενα βήματα που αξίζει να κάνετε: καταγράψτε ποιες εξαιρέσεις έχετε προσθέσει και γιατί, επιβεβαιώστε αν ο πελάτης μπλοκάρει μόνο κίνηση εντός του τούνελ ή όλη την κίνηση, και παρακολουθήστε ένα αίτημα υποβάθρου από την αρχή ως το τέλος με το αρχείο καταγραφής του διακομιστή ανοιχτό. Αυτές οι τρεις απαντήσεις καλύπτουν το μεγαλύτερο μέρος από όσα περιέχει πραγματικά μια αναφορά του τύπου «έπεσε το VPN και κάτι παραμένει συνδεδεμένο».