Υπάρχει ένα πρότυπο για το ποιες ενέργειες F5 και Ctrl + F5 προκαλούν στα προγράμματα περιήγησης ιστού;
Κάποτε έκανα ένα πείραμα στον IE6 και τον Firefox 2.x. Η ανανέωση F5 θα προκαλούσε ένα αίτημα HTTP που θα στέλνονταν στον διακομιστή με μια επικεφαλίδα If-Modified-Since
, ενώ το Ctrl + F5 δεν θα είχε μια τέτοια επικεφαλίδα. Κατά την κατανόησή μου, το F5 θα προσπαθήσει να χρησιμοποιήσει όσο το δυνατόν περισσότερο το αποθηκευμένο περιεχόμενο, ενώ το Ctrl + F5 προορίζεται να εγκαταλείψει όλο το αποθηκευμένο περιεχόμενο και απλά να ανακτήσει ξανά όλο το περιεχόμενο από τους διακομιστές.
Αλλά σήμερα, παρατήρησα ότι σε ορισμένα από τα τελευταία προγράμματα περιήγησης (Chrome, IE8) δεν λειτουργεί πλέον με αυτόν τον τρόπο. Τόσο το F5 όσο και το Ctrl + F5 στέλνουν την επικεφαλίδα If-Modified-Since
.
Πώς υποτίθεται λοιπόν ότι πρέπει να λειτουργεί αυτό, ή (αν δεν υπάρχει πρότυπο) πώς διαφέρουν οι κύριοι φυλλομετρητές στον τρόπο με τον οποίο υλοποιούν αυτές τις λειτουργίες ανανέωσης;
Εξαρτάται από το πρόγραμμα περιήγησης, αλλά συμπεριφέρονται με παρόμοιο τρόπο.
Έχω δοκιμάσει τον FF, τον IE7, την Opera και τον Chrome.
F5 συνήθως ενημερώνει τη σελίδα μόνο εάν έχει τροποποιηθεί. Το πρόγραμμα περιήγησης συνήθως προσπαθεί να χρησιμοποιήσει όλους τους τύπους κρυφής μνήμης όσο το δυνατόν περισσότερο και προσθέτει μια επικεφαλίδα "If-modified-since" στην αίτηση. Η Opera διαφέρει στέλνοντας ένα "Cache-Control: no-cache".
CTRL-F5 χρησιμοποιείται για να εξαναγκάσει μια ενημέρωση, αγνοώντας οποιαδήποτε κρυφή μνήμη. Ο IE7 προσθέτει ένα "Cache-Control: no-cache", όπως και ο FF, ο οποίος προσθέτει επίσης ένα "Pragma: no-cache". Ο Chrome κάνει ένα κανονικό "If-modified-since" και ο Opera αγνοεί το κλειδί.
Αν θυμάμαι καλά ήταν ο Netscape που ήταν ο πρώτος browser που πρόσθεσε υποστήριξη για cache-control προσθέτοντας "Pragma: No-cache" όταν πατούσατε CTRL-F5.
Επεξεργασία: Ενημερωμένος πίνακας
Ο παρακάτω πίνακας έχει ενημερωθεί με πληροφορίες σχετικά με το τι θα συμβεί όταν πατηθεί το κουμπί ανανέωσης του προγράμματος περιήγησης (μετά από αίτημα του Joel Coehoorn) και την κεφαλίδα "max-age=0" Cache-control-header.
Αναβαθμισμένος πίνακας, 27 Σεπτεμβρίου 2010
┌────────────┬───────────────────────────────────────────────┐
│ UPDATED │ Firefox 3.x │
│27 SEP 2010 │ ┌────────────────────────────────────────────┤
│ │ │ MSIE 8, 7 │
│ Version 3 │ │ ┌─────────────────────────────────────────┤
│ │ │ │ Chrome 6.0 │
│ │ │ │ ┌──────────────────────────────────────┤
│ │ │ │ │ Chrome 1.0 │
│ │ │ │ │ ┌───────────────────────────────────┤
│ │ │ │ │ │ Opera 10, 9 │
│ │ │ │ │ │ ┌────────────────────────────────┤
│ │ │ │ │ │ │ │
├────────────┼──┼──┼──┼──┼──┼────────────────────────────────┤
│ F5│IM│I │IM│IM│C │ │
│ SHIFT-F5│- │- │CP│IM│- │ Legend: │
│ CTRL-F5│CP│C │CP│IM│- │ I = "If-Modified-Since" │
│ ALT-F5│- │- │- │- │*2│ P = "Pragma: No-cache" │
│ ALTGR-F5│- │I │- │- │- │ C = "Cache-Control: no-cache" │
├────────────┼──┼──┼──┼──┼──┤ M = "Cache-Control: max-age=0" │
│ CTRL-R│IM│I │IM│IM│C │ - = ignored │
│CTRL-SHIFT-R│CP│- │CP│- │- │ │
├────────────┼──┼──┼──┼──┼──┤ │
│ Click│IM│I │IM│IM│C │ With 'click' I refer to a │
│ Shift-Click│CP│I │CP│IM│C │ mouse click on the browsers │
│ Ctrl-Click│*1│C │CP│IM│C │ refresh-icon. │
│ Alt-Click│IM│I │IM│IM│C │ │
│ AltGr-Click│IM│I │- │IM│- │ │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘
Δοκιμασμένες εκδόσεις:
Σημειώσεις:
Η έκδοση 3.0.6 στέλνει I και C, αλλά η έκδοση 3.1.6 ανοίγει τη σελίδα σε νέα καρτέλα, κάνοντας μια κανονική αίτηση μόνο με το "I".
Η έκδοση 10.62 δεν κάνει τίποτα. Η έκδοση 9.61 μπορεί να κάνει C, εκτός αν πρόκειται για τυπογραφικό λάθος στον παλιό μου πίνακα.
Σημείωση σχετικά με τον Chrome 6.0.472: Αν κάνετε αναγκαστική επαναφόρτωση (όπως CTRL-F5) συμπεριφέρεται σαν το url να είναι εσωτερικά σημειωμένο ώστε να κάνει πάντα αναγκαστική επαναφόρτωση. Η σημαία διαγράφεται αν μεταβείτε στη γραμμή διευθύνσεων και πατήσετε enter.
Σε γενικές γραμμές:
F5 μπορεί να σας δώσει την ίδια σελίδα ακόμη και αν το περιεχόμενο έχει αλλάξει, επειδή μπορεί να φορτώσει τη σελίδα από την προσωρινή μνήμη. Αλλά το Ctrl-F5 επιβάλλει την ανανέωση της προσωρινής μνήμης και εγγυάται ότι αν το περιεχόμενο αλλάξει, θα λάβετε το νέο περιεχόμενο.
Όταν ο χρήστης πατάει F5 αν και το νέο αίτημα πηγαίνει στον διακομιστή ιστού και λαμβάνει επίσης μια απάντηση για το αίτημα. Αλλά όταν η επικεφαλίδα απάντησης αναλύεται, ελέγχει τις απαιτούμενες πληροφορίες στην κρυφή μνήμη του προγράμματος περιήγησης. Εάν οι απαιτούμενες πληροφορίες στην κρυφή μνήμη δεν έχουν λήξει, τότε οι πληροφορίες αυτές αποκαθίστανται από την ίδια την κρυφή μνήμη.
Όταν ο χρήστης κάνει κλικ στο CTRL-F5 ακόμη και τότε το νέο αίτημα πηγαίνει στον διακομιστή ιστού και λαμβάνει απάντηση. Αλλά αυτή τη φορά, όταν η κεφαλίδα απάντησης αναλύεται, δεν ελέγχει καμία απαιτούμενη πληροφορία στην προσωρινή μνήμη και φέρνει όλες τις ενημερωμένες πληροφορίες μόνο από το διακομιστή.