Τι είναι τα προσωρινά αποθηκευμένα δεδομένα; Τι σημαίνει Clear Cache και τι κάνει;

Πρώτον, τι είναι μια προσωρινή μνήμη;

Σε γενικές γραμμές, μια προσωρινή μνήμη (προφέρεται "μετρητά") είναι ένας τύπος αποθετηρίου. Μπορείτε να σκεφτείτε ένα αποθετήριο ως αποθήκη αποθήκευσης. Στον στρατό, αυτό θα ήταν να κρατάτε όπλα, τρόφιμα και άλλες προμήθειες που απαιτούνται για την προώθηση μιας αποστολής.

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

Η διάκριση μεταξύ μιας προσωρινής μνήμης και άλλων τύπων αποθετηρίων

Ο πρωταρχικός σκοπός μιας προσωρινής μνήμης είναι να επιταχύνει την ανάκτηση πόρων ιστοσελίδας, μειώνοντας τους χρόνους φόρτωσης της σελίδας. Μια άλλη κρίσιμη πτυχή της προσωρινής μνήμης είναι να διασφαλιστεί ότι περιέχει σχετικά νέα δεδομένα.

Αυτό το άρθρο θα καλύψει δύο επικρατούσες μεθόδους προσωρινής αποθήκευσης: προσωρινή αποθήκευση προγράμματος περιήγησης και Δίκτυα παράδοσης περιεχομένου (CDN).

Εκτός από τις κρυφές μνήμες, άλλα αποθετήρια συμμετέχουν σε αρχιτεκτονικές ιστού. Συχνά αυτά έχουν σχεδιαστεί για να συγκρατούν τεράστια ποσότητα δεδομένων. Δεν επικεντρώνονται, ωστόσο, στην απόδοση ανάκτησης.

Για παράδειγμα, το Amazon Glacier είναι ένα αποθετήριο δεδομένων που έχει σχεδιαστεί για να αποθηκεύει δεδομένα φθηνά, αλλά δεν τα ανακτά γρήγορα. Η βάση δεδομένων SQL, από την άλλη πλευρά, έχει σχεδιαστεί για να είναι ευέλικτη, ενημερωμένη και γρήγορη, αλλά σπάνια είναι φθηνή και όχι συνήθως τόσο γρήγορη όσο μια προσωρινή μνήμη.

Η προσωρινή μνήμη του προγράμματος περιήγησης: μια προσωρινή μνήμη

Η μνήμη cache αποθηκεύει πόρους τοπικά στον υπολογιστή όπου εκτελείται το πρόγραμμα περιήγησης. Ενώ το πρόγραμμα περιήγησης είναι ενεργό, οι ανακτημένοι πόροι θα αποθηκευτούν στη φυσική μνήμη του υπολογιστή (RAM) και πιθανώς και στον σκληρό δίσκο.

Αργότερα, όταν οι ακριβείς οι ίδιοι πόροι που απαιτούνται κατά την επανεξέταση μιας ιστοσελίδας, το πρόγραμμα περιήγησης θα τραβήξει αυτά από τη μνήμη cache αντί του απομακρυσμένου διακομιστή. Δεδομένου ότι η προσωρινή μνήμη αποθηκεύεται τοπικά, σε γρήγορη μνήμη, οι πόροι αυτοί ανακτώνται πιο γρήγορα και η σελίδα φορτώνεται πιο γρήγορα.

Η ταχύτητα της ανάκτησης πόρων είναι ουσιαστική, αλλά είναι και η ανάγκη οι πόροι να είναι φρέσκοι. Ένας παλιός πόρος είναι αυτός που είναι ξεπερασμένος και ενδέχεται να μην είναι πλέον έγκυρος.

Μέρος της εργασίας του προγράμματος περιήγησης είναι ο εντοπισμός των πόρων που έχουν αποθηκευτεί στην κρυφή μνήμη και είναι παλιότεροι. Δεδομένου ότι μια ιστοσελίδα έχει συνήθως πόρους μπορεί, συνήθως θα υπάρχει ένας συνδυασμός παλιών και φρέσκων εκδόσεων στην κρυφή μνήμη.

Πώς γνωρίζει το πρόγραμμα περιήγησης τι είναι παλιό στην κρυφή μνήμη;

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

κρυφή μνήμη

Ιταλοί

Το cache-busting είναι μια τεχνική από την πλευρά του διακομιστή που διασφαλίζει ότι το πρόγραμμα περιήγησης παίρνει μόνο νέους πόρους. Αυτό το κάνει έμμεσα.

Παρόλο που η προσωρινή αποθήκευση μπορεί να ακούγεται δραματική, στην πραγματικότητα δεν καταστρέφει τίποτα και δεν αγγίζει καν αυτό που έχει ήδη αποθηκευτεί στο πρόγραμμα περιήγησης. Το μόνο που κάνει η προσωρινή αποθήκευση είναι να αλλάξει το URI του αρχικού πόρου με τέτοιο τρόπο ώστε να φαίνεται στο πρόγραμμα περιήγησης ότι ο πόρος είναι εντελώς νέος. Δεδομένου ότι φαίνεται νέο, δεν θα βρίσκεται στην προσωρινή μνήμη του προγράμματος περιήγησης. Η παλιά έκδοση του προσωρινά αποθηκευμένου πόρου θα παραμείνει προσωρινά αποθηκευμένη, αλλά τελικά θα μαραθεί και θα πεθάνει, για να μην είναι δυνατή η πρόσβαση ξανά.

Ας πούμε ότι έχω μια ιστοσελίδα www.foobar.com/about.htmlπου να λέει τα πάντα για το foobar.com που θα θέλατε ποτέ να ξέρετε. Μόλις επισκεφτείτε αυτήν τη σελίδα, αυτή και οι πόροι που σχετίζονται με αυτήν αποθηκεύονται στην κρυφή μνήμη από το πρόγραμμα περιήγησης.

Αργότερα, το foobar.com εξαγοράζεται από την εταιρεία Quxbaz και το περιεχόμενο της σχετικής σελίδας υφίσταται σημαντικές αλλαγές. Η προσωρινή μνήμη του προγράμματος περιήγησης δεν θα έχει αυτό το νέο περιεχόμενο, ωστόσο μπορεί να πιστεύει ότι το περιεχόμενο που έχει είναι τρέχον και δεν θα προσπαθήσει ποτέ να το ανακτήσει.

Τι κάνετε, ο διαχειριστής του διαδικτύου Quxbaz, για να διασφαλίσετε ότι θα απορριφθεί όλο το νέο περιεχόμενο;

Δεδομένου ότι το πρόγραμμα περιήγησης βασίζεται στο URI για να βρει αντικείμενα στην κρυφή μνήμη, εάν αλλάξει το URI ενός πόρου, τότε είναι σαν το πρόγραμμα περιήγησης να μην το έχει δει ποτέ πριν πάει να πάρει αυτόν τον πόρο από τον διακομιστή.

Έτσι, αλλάζοντας το URI πόρου από www.foobar.com/about.htmlσε www.foobar.com/about2.html(ή σε www.quxbaz.com/about.html), το πρόγραμμα περιήγησης δεν θα βρει πόρο προσωρινής μνήμης που σχετίζεται με αυτό το URI και θα πραγματοποιήσει πλήρη λήψη από το διακομιστή. Ο πόρος μπορεί να είναι ουσιαστικά ο ίδιος με το αρχικό κάτω από το παλιό URI, αλλά το πρόγραμμα περιήγησης δεν το γνωρίζει.

Ωστόσο, δεν χρειάζεται να αλλάξετε το όνομα της σελίδας. Από το URI περιλαμβάνει επίσης μια σειρά ερωτημάτων εξ ορισμού, μπορείτε να προσθέσετε μια παράμετρο έκδοση για το URI: www.foobar.com/about.html?v=2hef9eb1.

Σε αυτήν την περίπτωση, η παράμετρος έκδοσης v ορίζεται νέα μια νέα τιμή κατακερματισμού που δημιουργείται κάθε φορά που αλλάζει το περιεχόμενο ή ενεργοποιείται από κάποια άλλη διαδικασία, όπως επανεκκίνηση διακομιστή. Το πρόγραμμα περιήγησης βλέπει ότι η συμβολοσειρά ερωτήματος έχει αλλάξει και επειδή οι συμβολοσειρές ερωτημάτων μπορούν να επηρεάσουν αυτό που θα επιστραφεί, θα ανακτήσει έναν ενημερωμένο πόρο από το διακομιστή.

Καμία από αυτές τις τεχνικές δεν θα λειτουργήσει εάν η παλιά URI έχει άμεση πρόσβαση από έναν σελιδοδείκτη. Εκτός εάν δοθεί εντολή στο πρόγραμμα περιήγησης να επικυρώσει ξανά το URI στο τελευταίο προσωρινά αποθηκευμένο αίτημα (ή ο προσωρινός αποθηκευμένος πόρος έληξε), δεν θα πραγματοποιήσει πλήρη λήψη για να ανανεώσει την προσωρινή μνήμη του. Αυτό μας φέρνει στο επόμενο θέμα.

Πεδία κεφαλίδας HTTP

Κάθε αίτημα πόρου συνοδεύεται από ορισμένες μετα-πληροφορίες γνωστές ως κεφαλίδα. Αντίθετα, κάθε απόκριση έχει επίσης σχετικές πληροφορίες κεφαλίδας.

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

Αιτήματα HEAD και αιτήματα υπό όρους

Ένα αίτημα HEAD είναι σαν ένα περικομμένο GET ή ένα POST. Αντί να ζητήσει τον πλήρη πόρο, ένα αίτημα HEAD ζητά μόνο τα πεδία κεφαλίδας που διαφορετικά θα επιστραφούν μετά από ένα πλήρες αίτημα.

Η κεφαλίδα ενός πόρου γενικά θα είναι πολύ μικρότερη (σε αριθμό συνολικών byte) από τα δεδομένα πόρων που σχετίζονται με αυτό (το "σώμα" της απόκρισης). Οι πληροφορίες κεφαλίδας είναι επαρκώς ενημερωτικές για να επιτρέψουν στο πρόγραμμα περιήγησης να προσδιορίσει την ανανέωση του πόρου στην προσωρινή μνήμη του.

Τα αιτήματα HEAD χρησιμοποιούνται συχνά για την επαλήθευση της εγκυρότητας ενός πόρου διακομιστή (δηλαδή, εξακολουθεί να υπάρχει ο πόρος και εάν ναι, έχει ενημερωθεί από την τελευταία πρόσβαση του προγράμματος περιήγησης;). Το πρόγραμμα περιήγησης θα χρησιμοποιήσει ό, τι υπάρχει στην κρυφή μνήμη του, εάν το αίτημα HEAD δηλώνει ότι ο πόρος είναι έγκυρος, διαφορετικά θα εκτελέσει ένα πλήρες αίτημα GET ή POST και θα ανανεώσει την προσωρινή μνήμη του με αυτό που επιστρέφεται.

Με ένα αίτημα υπό όρους, το πρόγραμμα περιήγησης αποστέλλει πεδία στην κεφαλίδα περιγράφοντας τη φρεσκάδα του προσωρινά αποθηκευμένου πόρου του. Αυτή τη φορά, ο διακομιστής καθορίζει εάν η προσωρινή μνήμη του προγράμματος περιήγησης είναι ακόμα νέα.

Εάν είναι, ο διακομιστής επιστρέφει μια απόκριση 304 μόνο με τις πληροφορίες κεφαλίδας του πόρου και χωρίς σώμα πόρων (τα δεδομένα). Εάν η προσωρινή μνήμη του προγράμματος περιήγησης είναι ξεπερασμένη, τότε ο διακομιστής θα επιστρέψει μια πλήρη απόκριση 200 OK.

Αυτός ο μηχανισμός είναι ταχύτερος από τη χρήση αιτημάτων HEAD, καθώς εξαλείφει τη δυνατότητα να εκδώσει δύο αιτήματα αντί ενός.

Τα παραπάνω απλοποιούν αυτό που μπορεί να είναι μια πολύ περίπλοκη διαδικασία. Υπάρχει πολλή προσαρμογή στην προσωρινή αποθήκευση, αλλά όλα ελέγχονται μέσω πεδίων κεφαλίδας, το πιο σημαντικό από τα οποία είναι ο έλεγχος προσωρινής μνήμης.

Cache-Control

Όταν απαντά σε ένα αίτημα, ο διακομιστής θα στείλει πεδία κεφαλίδας στο πρόγραμμα περιήγησης υποδεικνύοντας ποια συμπεριφορά πρέπει να προσαρμοστεί κατά την προσωρινή αποθήκευση. Εάν φορτώσω τη σελίδα στο //en.wikipedia.org/wiki/Uniform_Resource_Identifier, η απόκριση το περιέχει στην εγγραφή κεφαλίδας:

cache-control: private, s-maxage=0, max-age=0, must-revalidate 

ιδιωτικό σημαίνει ότι μόνο το πρόγραμμα περιήγησης πρέπει να αποθηκεύει προσωρινά το περιεχόμενο του εγγράφου.

Το s-maxage και το max-age ορίζονται σε 0 . Η τιμή s-maxage είναι για διακομιστές μεσολάβησης με κρυφές μνήμες, ενώ η μέγιστη ηλικία προορίζεται για το πρόγραμμα περιήγησης. Η επίδραση της ρύθμισης max-age και μόνο είναι ότι η μνήμη cache του πόρου λήγει αμέσως, αλλά μπορεί ακόμα να χρησιμοποιηθεί (αν και μπαγιάτικο) κατά τη διάρκεια της σελίδας επαναφορτίσεις, ενώ στην ίδια περίοδο του προγράμματος περιήγησης.

Ένας παλιός πόρος μπορεί να είναι επανεπικύρωση μέσω ενός αιτήματος HEAD, το οποίο μπορεί να ακολουθείται από ένα αίτημα GET ή POST, ανάλογα με την απόκριση. Η οδηγία must-revalidate δίνει εντολή στο πρόγραμμα περιήγησης να επικυρώσει ξανά τον προσωρινά αποθηκευμένο πόρο εάν είναι παλιός.

Δεδομένου ότι η μέγιστη ηλικία έχει οριστεί σε 0 σε αυτήν την περίπτωση, ο προσωρινά αποθηκευμένος πόρος είναι παλιός μόλις ληφθεί. Ο συνδυασμός των δύο οδηγιών είναι ισοδύναμος με την ενιαία οδηγία no-cache .

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

Οι οδηγίες ελέγχου της προσωρινής μνήμης είναι πολύ εκτεταμένες και μερικές φορές προκαλούν σύγχυση - είναι ένα θέμα από μόνοι τους. Μπορείτε να βρείτε μια πλήρη τεκμηριωμένη λίστα οδηγιών εδώ.

Ε-ετικέτα

Αυτό είναι ένα διακριτικό που στέλνει ο διακομιστής και το πρόγραμμα περιήγησης διατηρεί μέχρι το επόμενο αίτημα. Αυτό χρησιμοποιείται μόνο όταν το πρόγραμμα περιήγησης γνωρίζει ότι έχει λήξει η διάρκεια ζωής του πόρου.

Οι ηλεκτρονικές ετικέτες είναι τιμές κατακερματισμού που δημιουργούνται από διακομιστή, οι οποίες συχνά χρησιμοποιούν το όνομα του φυσικού αρχείου του πόρου και την τελευταία τροποποιημένη ημερομηνία στο διακομιστή ως σπόρος. Όταν ενημερώνεται ένα αρχείο πόρου, η τροποποιημένη ημερομηνία αλλάζει και δημιουργείται μια νέα τιμή κατακερματισμού και αποστέλλεται στην κεφαλίδα απόκρισης στο αίτημα.

Άλλες ετικέτες κεφαλίδας που επηρεάζουν την προσωρινή αποθήκευση

Οι ετικέτες κεφαλίδας λήγουν και η τελευταία τροποποίηση είναι όλες ξεπερασμένες, αλλά εξακολουθούν να αποστέλλονται από τους περισσότερους διακομιστές για συμβατότητα με παλαιότερα προγράμματα περιήγησης. Ενα παράδειγμα:

expires: Thu, 01 Jan 1970 00:00:00 GMT last-modified: Sun, 01 Mar 2020 17:59:02 GMT 

Εδώ, η λήξη ορίζεται στην μηδενική ημερομηνία (ιστορικά, από το λειτουργικό σύστημα UNIX). Αυτό υποδηλώνει ότι ο πόρος λήγει αμέσως, όπως και το max-age = 0 . Η τελευταία τροποποίηση ενημερώνει το πρόγραμμα περιήγησης πότε έγινε η τελευταία ενημέρωση στον πόρο, τον οποίο στη συνέχεια μπορεί να χρησιμοποιήσει για να αποφασίσει εάν θα πρέπει να το ανακτήσει αντί να χρησιμοποιήσει την τιμή προσωρινής μνήμης.

Αναγκαστική ανανέωση προσωρινής μνήμης από το πρόγραμμα περιήγησης

Τι είναι μια σκληρή φόρτωση;

Μια σκληρή επαναφόρτωση επιβάλλει την ανάκτηση όλων των πόρων σε μια σελίδα, είτε είναι περιεχόμενο, σενάρια, φύλλα στυλ ή πολυμέσα. Σχεδόν τα πάντα, σωστά;

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

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

Τι είναι η εκκαθάριση προσωρινής μνήμης και η επαναφόρτωση;

Αυτή η λειτουργία διαγράφει ολόκληρη την προσωρινή μνήμη του προγράμματος περιήγησης, η οποία έχει το ίδιο αποτέλεσμα με μια σκληρή φόρτωση, αλλά επιπλέον προκαλεί την ανάκτηση δυναμικών φορτωμένων πόρων - τελικά, δεν υπάρχει τίποτα στην προσωρινή μνήμη, οπότε δεν υπάρχει επιλογή!

Δίκτυα παράδοσης περιεχομένου: μια κρυφή μνήμη γεωγραφικής τοποθεσίας

Ένα CDN είναι κάτι περισσότερο από μια προσωρινή μνήμη, αλλά η προσωρινή αποθήκευση είναι μία από τις δουλειές της. Ένα CDN αποθηκεύει δεδομένα σε γεωγραφικά κατανεμημένες τοποθεσίες, έτσι ώστε οι χρόνοι μετ 'επιστροφής από και προς ένα γεωγραφικά τοπικό πρόγραμμα περιήγησης να μειώνονται.

Τα αιτήματα του προγράμματος περιήγησης δρομολογούνται σε ένα κοντινό CDN, μειώνοντας έτσι τα δεδομένα απόκρισης φυσικής απόστασης που πρέπει να διανύσουν. Τα CDN μπορούν επίσης να χειριστούν μεγάλες ποσότητες κίνησης και να παρέχουν ασφάλεια έναντι ορισμένων τύπων επιθέσεων.

Ένα CDN αποκτά τους πόρους του μέσω ενός Internet Exchange Point (IXP), κόμβων που αποτελούν μέρος της ραχοκοκαλιάς του Διαδικτύου (με κεφαλαία γράμματα). Υπάρχουν βήματα για να ρυθμίσετε τη δρομολόγηση αιτήσεων για να μεταβείτε σε ένα CDN αντί για τον κεντρικό διακομιστή. Το επόμενο βήμα είναι να βεβαιωθείτε ότι το CDN έχει το τρέχον περιεχόμενο του ιστότοπού σας.

Παλαιότερα, τα περισσότερα CDN υποστήριξαν τη μέθοδο push: ένας ιστότοπος θα έδινε νέο περιεχόμενο σε έναν κόμβο CDN, ο οποίος στη συνέχεια θα διανεμόταν σε γεωγραφικά διασκορπισμένους κόμβους.

Σήμερα, τα περισσότερα CDN χρησιμοποιούν τα πρωτόκολλα προσωρινής αποθήκευσης που περιγράφονται παραπάνω (ή παρόμοια) για 1) λήψη νέων πόρων και 2) ανανέωση υπαρχόντων. Το πρόγραμμα περιήγησης εξακολουθεί να έχει την προσωρινή μνήμη του και καμία από αυτές δεν αλλάζει. Το μόνο που κάνει ένα CDN είναι να κάνει αυτές τις μεταφορές νέων πόρων πιο γρήγορες.