2011-05-04 18 views
9

Estoy enviando encabezados de respuesta HTTP "caducados" válidamente formateados (por ejemplo, "Mié, 04 de mayo de 2011 09:29:09 GMT") con una página servido a través de https: // [host]: {puerto}/(con [host] siendo localhost) desde una aplicación J2EE, usando response.setDateHeader("Expires", {milliseconds a few seconds in the future}).¿Por qué Google Chrome NO utiliza las páginas en caché cuando defino el encabezado HTTP "Expira"

En mis páginas tengo un enlace a la misma página. Cuando hago clic en este enlace desde Firefox (4) o IE (8), la página se vuelve a cargar desde la caché hasta que se alcanza el tiempo caducado. Una vez que se supera el tiempo caducado, al hacer clic en el mismo enlace, la página se carga desde el servidor con datos nuevos. Si presiono F5 en cualquiera de los navegadores mencionados, la página se carga con nuevos datos del servidor (Firebug me muestra que Cache-Control: max-age=0 se está enviando con la solicitud).

Con Google Chrome, tanto F5 como hacer clic en el enlace tienen el mismo efecto. La página SIEMPRE se carga desde el servidor con nuevos datos.

No he podido encontrar ninguna explicación bien documentada de este efecto.

¿Alguien sabe por qué en mi caso Google Chrome no respeta los encabezados "Caducados" que el servidor está enviando con las respuestas de la página y por lo tanto SIEMPRE solicita los datos del servidor?

Respuesta

7

La forma en que funciona Chrome a este respecto puede causar una confusión extrema. Parece que presionar F5 o "volver a cargar esta página" simplemente evita que Chrome ejecute una solicitud desde el caché. Esto se compara fácilmente con presionar Intro en la ventana de url, donde usará el caché, aunque en ambos casos el encabezado de solicitud (que no se envía a ningún lado) tiene Cache-Control: max-age = 0.

Si presiona ctrl + F5 obtiene Cache-Control: no-cache. Creo que la diferencia entre F5 & ctrl + F5 es que ambos darán como resultado que se envíe una solicitud al servidor, pero en el caso ctrl + F5 el servidor debería saber que no responde con un 304 no modificado.

Cuestiones relacionadas