¿Por qué los navegadores no respetan los encabezados de caché para la solicitud de página inicial?

8

Me estoy rascando un poco la cabeza con esto. Un sitio de Drupal que ejecuto está configurando los encabezados de caché apropiados que deberían indicar que la página se puede almacenar en caché durante 15 minutos. Sin embargo, cada vez que llego a la página, siempre envía una solicitud GET en lugar de cargar la página desde el caché.

No estoy actualizando forzosamente la página cada vez, lo que supongo que indicaría al navegador que quiero vaciar las cachés. No tengo habilitado ningún bloqueo de caché en modo desarrollador.

¿Es este el comportamiento predeterminado de los navegadores o me falta algo obvio? Aquí están los encabezados de solicitud / respuesta de golpear mi página de inicio desde las herramientas de desarrollo de FireFox:

NOTA / EDITAR : Algunas personas han sugerido que esto estaba relacionado con el Expiresencabezado en el pasado. Sin embargo, Cache-Controlanula cualquier cosa en Expires, como se describe en RFC 2616 , Sec. 14.9.3. Drupal incluye esto para deshabilitar el almacenamiento en caché en clientes HTTP 1.0 más antiguos, que no admiten el Varyencabezado más avanzado que Drupal necesita para el almacenamiento en caché adecuado.

ingrese la descripción de la imagen aquí

Brian
fuente

Respuestas:

11

Tiene un encabezado Vary: Cookie, Accept-Encoding en la respuesta. Eso significa que si el proxy (incluido su navegador) quería almacenar en caché esta página, debería estar preparado para almacenar en caché una nueva versión para cada cookie cookie modificada (o cambios en la codificación de aceptación). Especialmente, tendría que mantener un registro en primer lugar de las cookies, ya que fueron enviadas en la solicitud como criterio distintivo. Puedo imaginar que el navegador lo niega si la cookie es demasiado grande (y, por lo tanto, es poco probable que se repita), o lo niega para evitar que la información de la cookie se filtre a través del contenido de la memoria caché, o simplemente el contenido de la cookie se cambia en cada llamada.

Hagen von Eitzen
fuente
44
Estaba a punto de responder mi propia pregunta cuando llegué a esta conclusión también. Tengo cookies de Google Analytics, una de las cuales cambia en cada solicitud de página, evitando que la página se almacene en caché.
Brian
2

En los programas CMS, algunas páginas requieren interacción con la base de datos para mostrar el contenido dinámico específico de la solicitud de los usuarios. No se puede almacenar en caché toda la página o no mostrará el contenido correcto al usuario.

Un ejemplo de esto en la práctica es un carrito de compras de comercio electrónico / página de pago. Como la página se ve diferente cada vez, no hay forma de almacenarla en caché por completo. Sin saber más sobre la página específica, es difícil saber si la página a la que hace referencia requiere la participación de la base de datos.

JMC
fuente
Si bien eso es cierto, eso no es cierto para el mecanismo de almacenamiento en caché de páginas de Drupal (literalmente almacena en caché toda la salida HTML y lo entrega para el tráfico "anónimo") y no está realmente relacionado con mi pregunta. Mi pregunta es acerca de cómo los navegadores parecen reaccionar incorrectamente a los encabezados de caché de página apropiados que están configurados (ver la imagen).
Brian
He visto esto antes durante la depuración, pero no puedo recordar, ¿hay alguna razón válida por la que el encabezado de respuesta muestre Caduca: noviembre de 1978? O esa puede ser tu respuesta.
JMC
1
En el código de Drupal, el comentario sobre ese encabezado dice: "Los servidores proxy HTTP / 1.0 no admiten el encabezado Vary, por lo tanto, evite el almacenamiento en caché enviando una fecha de caducidad en el pasado. Los clientes HTTP / 1.1 ignoran el encabezado Expires si un control de caché: max-age = se especifica la directiva (ver RFC 2616, sección 14.9.3) ". La fecha específicamente es la creadora del cumpleaños de Drupal.
Brian
Todavía es extraño que el Caduca no coincida, por ejemplo, Última modificación más edad máxima
Hagen von Eitzen
-1

Además de las otras respuestas, el Expiresencabezado está en el pasado, esa es también una razón por la que los navegadores no almacenan en caché la página.

Tero Kilkanen
fuente
Esto no es cierto cuando hay un Cache-Controlencabezado presente. Anula el Expiresencabezado para clientes HTTP 1.1. Ver ietf.org/rfc/rfc2616.txt , sección 14.9.3.
Brian