¿Existe un estándar para las acciones F5 y Ctrl + F5 que se activan en los navegadores web?
Una vez hice un experimento en IE6 y Firefox 2.x. El F5 refresh desencadenaría una petición HTTP enviada al servidor con una cabecera If-Modified-Since
, mientras que Ctrl + F5 no tendría dicha cabecera. A mi entender, F5 intentará utilizar el contenido almacenado en caché tanto como sea posible, mientras que Ctrl + F5 pretende abandonar todo el contenido almacenado en caché y simplemente recuperar todo el contenido de los servidores de nuevo.
Pero hoy me he dado cuenta de que en algunos de los últimos navegadores (Chrome, IE8) ya no funciona de esta manera. Tanto F5 como Ctrl + F5 envían la cabecera If-Modified-Since
.
Entonces, ¿cómo se supone que funciona esto, o (si no hay un estándar) cómo difieren los principales navegadores en la forma de implementar estas características de actualización?
Depende del navegador, pero se comportan de forma similar.
He probado FF, IE7, Opera y Chrome.
F5 suele actualizar la página sólo si se modifica. El navegador suele intentar utilizar todos los tipos de caché en la medida de lo posible y añade una cabecera "If-modified-since" a la solicitud. Opera difiere enviando un "Cache-Control: no-cache".
CTRL-F5 se utiliza para forzar una actualización, sin tener en cuenta la caché. IE7 añade un "Cache-Control: no-cache", al igual que FF, que también añade "Pragma: no-cache". Chrome hace un "If-modified-since" normal y Opera ignora la clave.
Si no recuerdo mal, fue Netscape el primer navegador en añadir soporte para el control de la caché añadiendo "Pragma: No-cache" cuando se pulsaba CTRL-F5.
Edición: Tabla actualizada
La tabla siguiente se ha actualizado con información sobre lo que ocurrirá cuando se haga clic en el botón de actualización del navegador (después de una solicitud de Joel Coehoorn), y el encabezado de control de caché "max-age=0".
**Tabla actualizada, 27 de septiembre de 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│- │ │
└────────────┴──┴──┴──┴──┴──┴────────────────────────────────┘
Versiones probadas:
Notas:
La versión 3.0.6 envía I y C, pero la 3.1.6 abre la página en una nueva pestaña, haciendo una petición normal con sólo "I".
La versión 10.62 no hace nada. La 9.61 podría hacer la C, a no ser que se trate de un error tipográfico en mi antigua tabla.
Nota sobre Chrome 6.0.472: Si haces una recarga forzada (como CTRL-F5) se comporta como si la url estuviera marcada internamente para hacer siempre una recarga forzada. La marca se borra si vas a la barra de direcciones y presionas enter.
En general:
F5 puede darte la misma página aunque el contenido haya cambiado, porque puede cargar la página desde la caché. Pero Ctrl-F5 fuerza una actualización de la caché, y garantizará que si el contenido se cambia, obtendrá el nuevo contenido.
Cuando el usuario presiona F5 aunque la nueva solicitud va al servidor web y obtener una respuesta para la solicitud también. Pero cuando la cabecera de la respuesta es analizada, se comprueba la información requerida en la caché del navegador. Si la información requerida en el caché no ha caducado entonces esa información se restaura desde el propio caché.
Cuando el usuario hace clic en CTRL-F5 incluso entonces la nueva solicitud va al servidor web y obtiene una respuesta. Pero esta vez cuando la cabecera de la respuesta es analizada no comprueba ninguna información requerida en la caché, y trae toda la información actualizada del servidor solamente.