Cabeceras de control de caché HTTP ideales para diferentes tipos de recursos

Quiero encontrar un conjunto mínimo de encabezados que funcionen con “todos” los cachés y navegadores (¡también cuando se usa HTTPS !)

En mi sitio web, tendré tres tipos de recursos:

(1) Forever cacheable (público / igual para todos los usuarios)

Ejemplo: 0A470E87CC58EE133616F402B5DDFE1C.cache.html ( generado automáticamente por GWT )

  • A estos archivos se les asigna automáticamente un nuevo nombre cuando cambian de contenido (según el MD5).

  • Deberían almacenarse en la Cache-Control: public caché tanto como sea posible, incluso cuando se usa HTTPS (así que supongo que debo configurar Cache-Control: public , especialmente para Firefox).

  • No deberían exigir al cliente que realice un viaje de ida y vuelta al servidor para validarlo, si el contenido ha cambiado.

(2) Cambiando ocasionalmente (público / igual para todos los usuarios)

Ejemplos: index.html, mymodule.nocache.js

  • Estos archivos cambian su contenido sin cambiar la URL cuando se implementa una nueva versión del sitio.

  • Pueden almacenarse en caché, pero probablemente necesiten un viaje de ida y vuelta para ser revalidados cada vez.

(3) Individual para cada solicitud (privada / específica del usuario)

Ejemplo: respuestas JSON

  • Estos recursos nunca se deben almacenar en caché sin cifrar en el disco bajo ninguna circunstancia. (Excepto que tal vez tenga algunas solicitudes específicas que podrían almacenarse en caché).

Tengo una idea general sobre qué encabezados probablemente usaría para cada tipo, pero siempre hay algo que podría extrañar.

Probablemente usaría estas configuraciones:

  1. Cache-Control: max-age=31556926 – Las representaciones pueden ser almacenadas en caché por cualquier caché. La representación en caché debe considerarse fresca por 1 año:

    Para marcar una respuesta como “nunca caduca”, un servidor de origen envía una fecha de expiración aproximadamente un año desde el momento en que se envía la respuesta. Los servidores HTTP / 1.1 NO DEBEN enviar fechas de Caducidad más de un año en el futuro.

  2. Cache-Control: no-cache : las representaciones pueden ser almacenadas en caché por cualquier caché. Pero las memorias caché deben enviar la solicitud al servidor de origen para su validación antes de liberar una copia en caché.
  3. Cache-Control: no-store : los cachés no deben almacenar en caché la representación bajo ninguna condición.

Consulte el tutorial de caché de Mark Nottingham para obtener más información.

Los casos uno y dos son en realidad el mismo escenario. Debe establecer Cache-Control: public y luego generar una URL con el número de comstackción / versión del sitio para que tenga recursos inmutables que podrían durar para siempre. También desea establecer el encabezado Expires un año o más en el futuro para que el cliente no tenga que emitir una verificación de frescura.

Para el caso 3, puede hacer todo lo siguiente para obtener la máxima flexibilidad:

 "Cache-Control", "no-cache, must-revalidate" "Expires", 0 "Pragma", "no-cache"