Pregunta 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 buscadores (también cuando se usan HTTPS!

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

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

Ejemplo: 0A470E87CC58EE133616F402B5DDFE1C.cache.html (auto generado por GWT) 

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

  • Deben almacenarse en la memoria caché tanto como sea posible, incluso cuando se utiliza 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.


76
2018-06-04 01:23


origen


Respuestas:


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 un    Vence fecha aproximadamente un año desde el momento en que la respuesta es   expedido. Los servidores HTTP / 1.1 NO DEBEN enviar Vence Fechas más de uno   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 - Las memorias caché no deben almacenar en caché la representación bajo ninguna condición.

Ver Mark Nottingham Tutorial de almacenamiento en caché para mayor información.


83
2018-06-08 21:49



Los casos uno y dos son en realidad el mismo escenario. Debes establecer Cache-Control: public y luego generar una URL con el número de compilación / versión del sitio para que tenga recursos inmutables que podrían durar para siempre. También quiere configurar el Expires encabezado un año o más en el futuro para que el cliente no tenga que emitir un cheque 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"

-2
2018-06-08 01:36