¿Qué solicitudes generan los refrescos “F5” y “Ctrl + F5” de los navegadores?

¿Existe un estándar para las acciones que F5 y Ctrl + F5 activan en los navegadores web?

Una vez experimenté en IE6 y Firefox 2.x. La actualización de F5 activaría una solicitud HTTP enviada al servidor con un encabezado If-Modified-Since , mientras que Ctrl + F5 no tendría dicho encabezado. Según entiendo, F5 intentará utilizar el contenido almacenado en la memoria caché tanto como sea posible, mientras que Ctrl + F5 tiene la intención de abandonar todo el contenido almacenado en caché y recuperar todo el contenido de los servidores nuevamente.

Pero hoy noté que en algunos de los navegadores más recientes (Chrome, IE8) ya no funciona de esta manera. Tanto F5 como Ctrl + F5 envían el encabezado 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 cómo implementan estas características de actualización?

Generalmente hablando:

F5 puede darle la misma página incluso si se cambia el contenido, ya que puede cargar la página desde la memoria caché. Pero CtrlF5 obliga a actualizar la memoria caché, y garantizará que si se cambia el contenido, obtendrá el nuevo contenido.

Depende del navegador, pero se comportan de manera similar.

He probado FF, IE7, Opera y Chrome.

F5 generalmente actualiza la página solo si se modifica. El navegador generalmente intenta usar todos los tipos de caché tanto como sea posible y agrega un encabezado “If-modified-since” a la solicitud. Opera difiere al enviar un “Cache-Control: no-cache”.

CTRLF5 se utiliza para forzar una actualización, sin tener en cuenta ningún caché. IE7 agrega un “Cache-Control: no-cache”, al igual que FF, que también agrega “Pragma: no-cache”. Chrome hace un “If-modified-since” normal y Opera ignora la clave.

Si mal no recuerdo, fue Netscape el que fue el primer navegador en agregar soporte para el control de caché al agregar “Pragma: No-cache” cuando presionó CTRLF5 .

Editar: tabla actualizada

La siguiente tabla se actualiza con información sobre lo que sucederá cuando se haga clic en el botón de actualización del navegador (después de una solicitud de Joel Coehoorn ) y en el encabezado de control de caché de “max-age = 0”.

Cuadro actualizado, 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:

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

Notas:

  1. La versión 3.0.6 envía I y C, pero 3.1.6 abre la página en una nueva pestaña, haciendo una solicitud normal con solo “I”.

  2. La versión 10.62 no hace nada. 9.61 podría hacer C a menos que fuera un error tipográfico en mi tabla anterior.

Nota sobre Chrome 6.0.472 : si realizas una recarga forzada (como CTRLF5 ), se comporta como si la URL estuviera marcada internamente para realizar siempre una recarga forzada. La bandera se borra si va a la barra de direcciones y presiona enter.

Implementé una página compatible con varios navegadores para probar el comportamiento de actualización del navegador y obtener resultados similares a @some, pero para navegadores modernos:

enter image description here

Al menos en Firefox (v3.5), el caché parece estar deshabilitado en lugar de simplemente borrado. Si hay varias instancias de la misma imagen en una página, se transferirá varias veces. Ese es también el caso de las tags img que se agregan posteriormente a través de Ajax / JavaScript.

Entonces, en caso de que se pregunte por qué el navegador sigue descargando el mismo ícono cientos de veces en su sitio Ajax de actualización automática, es porque inicialmente cargó la página usando CTRLF5 .

IE7 / 8/9 parece comportarse de manera diferente dependiendo de si la página tiene foco o no.

Si hace clic en la página y CTRL + F5, se incluye “Cache-Control: no-cache” en los encabezados de las solicitudes. Si hace clic en la barra de Ubicación / Dirección y luego presiona CTRL + F5, no está.

Cuando el usuario presiona F5, la nueva solicitud va al servidor web y también responde a la solicitud. Pero cuando el encabezado responde es Parsed, verifica la información requerida en el caché del navegador. Si la información requerida en la memoria caché no ha expirado, esa información se restaura desde la misma memoria caché.

Cuando el usuario hace clic en CTRLF5 , entonces la nueva solicitud va al servidor web y recibe una respuesta. Pero esta vez, cuando el encabezado Responce está Analizado, no verifica ninguna información requerida en el caché, y trae toda la información actualizada solo del servidor.