Quali richieste generano gli aggiornamenti "F5" e "Ctrl + F5" dei browser?


394

Esiste uno standard per quali azioni F5e Ctrl + F5trigger nei browser Web?

Una volta ho fatto esperimenti su IE6 e Firefox 2.x. L' F5 aggiornamento innescherebbe una richiesta HTTP inviata al server con If-Modified-Sinceun'intestazione, mentre Ctrl + F5non avrebbe tale intestazione. A mio avviso, F5 proverò a utilizzare il più possibile il contenuto memorizzato nella cache, mentre Ctrl + F5 è destinato ad abbandonare tutto il contenuto memorizzato nella cache e recuperare nuovamente tutto il contenuto dai server.

Ma oggi ho notato che in alcuni dei browser più recenti (Chrome, IE8) non funziona più in questo modo. Entrambi F5e Ctrl + F5inviare l' If-Modified-Sinceintestazione.

Quindi come dovrebbe funzionare o, se non esiste uno standard, in che modo i principali browser differiscono nel modo in cui implementano queste funzionalità di aggiornamento?


10
FWIW: mentre questo potrebbe certamente essere un argomento Super User e potrebbe anche essere stato inteso come un po 'incentrato sull'utente finale quando richiesto inizialmente, a questo punto è stato sia risposto che referenziato da programmatori e sviluppatori web e probabilmente dovrebbe essere lasciato qui . SU ha già molte altre versioni più orientate all'utente finale e non ne ha bisogno ...
Shog9

Risposte:


313

Parlando in generale:

F5potrebbe darti la stessa pagina anche se il contenuto è cambiato, perché potrebbe caricare la pagina dalla cache. Ma Ctrl- F5forza un aggiornamento della cache e garantirà che se il contenuto viene modificato, otterrai il nuovo contenuto.


86
Questo è accurato, ma nota che mentre Ctrl + F5 farà in modo che il browser scarichi la cache e richieda un nuovo dal server, il server può ignorare l'intestazione no-cache e servire una pagina cache sul lato server. Quindi anche Ctrl + F5 può restituire una vecchia versione della pagina se il server ignora l'intestazione no-cache.
AaronLS,

F5 aggiornerà la pagina - CTRL + F5 eseguirà l'aggiornamento "difficile".
Dimitri Dewaele,

Ricorda inoltre che Ctrl-F5 invierà un modulo, se fornito.
Jawo,

Ok, quindi se premi ctrl + f5 dici al tuo browser di non usare la sua cache, ma cosa succede nelle richieste successive alla stessa pagina? Voglio dire, riesci a vedere le versioni precedenti della pagina dopo aver visto quella più vecchia? Se vedo la versione 1 della pagina perché è memorizzata nella cache ma è già disponibile la versione 2, capisco che premere ctrl + f5 mi farà vedere la versione 2. Quindi chiudo il browser e apro di nuovo quella pagina, vedo la versione 1 o continuo a vedere la versione 2? Grazie.
molerus,

525

Dipende dal browser ma si comportano in modo simile.

Ho testato FF, IE7, Opera e Chrome.

F5di solito aggiorna la pagina solo se viene modificata. Il browser in genere tenta di utilizzare tutti i tipi di cache il più possibile e aggiunge un'intestazione "If-modified-since" alla richiesta. Opera differisce inviando un "Cache-Control: no-cache".

CTRL- F5viene utilizzato per forzare un aggiornamento, ignorando qualsiasi cache. IE7 aggiunge un "Cache-Control: no-cache", così come FF, che aggiunge anche "Pragma: no-cache". Chrome esegue un normale "If-modificato-since" e Opera ignora la chiave.

Se ricordo bene, è stato Netscape il primo browser ad aggiungere il supporto per il controllo della cache aggiungendo "Pragma: No-cache" quando si preme CTRL- F5.

Modifica: tabella aggiornata

La tabella seguente è aggiornata con informazioni su cosa accadrà quando si fa clic sul pulsante di aggiornamento del browser (dopo una richiesta di Joel Coehoorn ) e l'intestazione "max-age = 0" Cache-control-header.

Tabella aggiornata, 27 settembre 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│- │                                │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘

Versioni testate:

  • Firefox 3.1.6 e 3.0.6 (WINXP)
  • MSIE 8.0.6001 e 7.0.5730.11 (WINXP)
  • Chrome 6.0.472.63 e 1.0.151.48 (WINXP)
  • Opera 10.62 e 9.61 (WINXP)

Appunti:

  1. La versione 3.0.6 invia I e C, ma 3.1.6 apre la pagina in una nuova scheda, facendo una normale richiesta con solo "I".

  2. La versione 10.62 non fa nulla. 9.61 potrebbe fare C a meno che non fosse un refuso nella mia vecchia tabella.

Nota su Chrome 6.0.472 : se esegui una ricarica forzata (come CTRL- F5) si comporta come se l'URL sia contrassegnato internamente per eseguire sempre una ricarica forzata. Il flag viene cancellato se vai alla barra degli indirizzi e premi invio.


5
@Joel Coehoorn: aggiornata la tabella con un clic sul pulsante di aggiornamento. Devi amare le tabelle grafiche ASCII, vero? Il codice colore era solo un effetto collaterale del codice colore.
circa il

11
Non puoi farlo come una tabella HTML corretta?
John Topley,

13
Cordiali saluti - questa risposta è stata effettivamente citata nelle schede di sviluppo / tracciamento dei bug di Chrome: code.google.com/p/chromium/issues/detail?id=1906
Kip

18
@ John Topley: le tabelle non sono consentite, quindi la risposta è no.
un po '

1
Ottimo lavoro su questa tabella: appartiene a quirksmode. +1. Mi chiedo se ci siano anche variazioni nelle intestazioni utilizzate per richiedere risorse all'interno della pagina aggiornata, come immagini, fogli di stile, ecc ...
James Hart,

68

Ho implementato una pagina compatibile con più browser per testare il comportamento di aggiornamento del browser (ecco il codice sorgente ) e ottenere risultati simili a @some, ma per i browser moderni:

inserisci qui la descrizione dell'immagine


I collegamenti sulla tua pagina sono interrotti, ho corretto il collegamento sulla risposta, ma molti dei collegamenti di quella pagina sono interrotti. podlipensky.com/examples/refreshbutton/index.html , podlipensky.com/post/2012/02/27/…
Juan Mendes,

Siamo spiacenti, sto facendo la migrazione del blog. I collegamenti saranno corretti APPENA POSSIBILE, per ora - vai al repository github e scarica esempi.
Pavel Podlipensky,

I collegamenti sono ancora interrotti. La migrazione non è terminata?
bernardn,

Puoi aggiornare la tua risposta con la versione corrente dei browser, in particolare Safari mobile e desktop, @PavelPodlipensky?
Greg Dubicki,

9

Almeno in Firefox (v3.5), la cache sembra essere disabilitata piuttosto che semplicemente cancellata. Se su una pagina sono presenti più istanze della stessa immagine, questa verrà trasferita più volte. Questo vale anche per i imgtag che vengono aggiunti successivamente tramite Ajax / JavaScript.

Quindi, nel caso ti stia chiedendo perché il browser continua a scaricare la stessa piccola icona alcune centinaia di volte sul tuo sito Ajax con aggiornamento automatico, è perché inizialmente hai caricato la pagina usando CTRL- F5.


3

IE7 / 8/9 sembrano comportarsi diversamente a seconda che la pagina abbia lo stato attivo o meno.

Se si fa clic sulla pagina e CTRL+, F5nelle intestazioni della richiesta è incluso "Cache-Control: no-cache". Se fai clic sulla barra Posizione / Indirizzo, premi CTRL+ F5non lo è.


1

Quando l'utente preme, F5sebbene la nuova richiesta vada al server Web e ottenga una risposta anche per la richiesta. Ma quando viene analizzata l'intestazione responce, controlla le informazioni richieste nella cache del browser. Se le informazioni richieste nella cache non sono scadute, tali informazioni vengono ripristinate dalla cache stessa.

Quando l'utente fa clic su CTRL, F5anche in questo caso la nuova richiesta va al server Web e ottiene una risposta. Ma questa volta quando viene analizzata l'intestazione responce, non controlla le informazioni richieste nella cache e porta solo tutte le informazioni aggiornate dal server dei moduli.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.