Pregunta ¿Cuál es la diferencia entre Cache-Control: max-age = 0 y no-cache?


El encabezado Cache-Control: max-age=0 implica que el contenido se considera obsoleto (y debe ser recuperado) inmediatamente, que en efecto es lo mismo que Cache-Control: no-cache.


528
2018-06-26 01:34


origen


Respuestas:


Tenía la misma pregunta y encontré información en mis búsquedas (su pregunta surgió como uno de los resultados). Esto es lo que determiné ...

Hay dos lados en el Cache-Control encabezamiento. Un lado es donde puede ser enviado por el servidor web (también conocido como "servidor de origen"). El otro lado es donde puede ser enviado por el navegador (también conocido como "agente de usuario").


Cuando es enviado por el servidor de origen

Creo max-age=0 simplemente le dice a los cachés (y a los agentes de usuario) que la respuesta está obsoleta desde el primer momento, por lo que DEBERÍA revalidar la respuesta (por ejemplo, con el If-Not-Modified encabezado) antes de usar una copia en caché, mientras que, no-cache les dice que DEBE revalidar antes de usar una copia en caché. De 14.9.1 Qué es Cacheable:

no-caché

... un caché NO DEBE usar la respuesta   para satisfacer una solicitud posterior   sin una revalidación exitosa con   el servidor de origen Esto permite   servidor de origen para evitar el almacenamiento en caché, incluso   por cachés que se han configurado para   devolver respuestas obsoletas al cliente   peticiones.

En otras palabras, los cachés a veces pueden elegir usar una respuesta obsoleta (aunque creo que tienen que agregar un Warning encabezado), pero no-cache dice que no tienen permitido usar una respuesta obsoleta sin importar qué. Tal vez quieras el DEBERÍA-revalidar el comportamiento cuando las estadísticas de béisbol se generan en una página, pero querrías DEBE-revalidar el comportamiento cuando ha generado la respuesta a una compra de comercio electrónico.

Aunque tienes razón en tu comentario cuando dices no-cache no se supone que impida el almacenamiento, en realidad podría ser otra diferencia cuando se usa no-cache. Encontré una página, Directivas de control de caché desmitificadas, eso dice (no puedo responder por su corrección):

En la práctica, IE y Firefox tienen   comenzó a tratar el no-caché   directiva como si instruye a la   navegador ni siquiera para almacenar en caché la página.   Comenzamos a observar este comportamiento   Hace un año. Sospechamos que   este cambio fue provocado por el   uso generalizado (e incorrecto) de este   directiva para evitar el almacenamiento en caché.

...

Observe que últimamente, "cache-control:   no-cache "también comenzó a comportarse   como la directiva "no-store".

Como un aparte, me parece que Cache-Control: max-age=0, must-revalidate básicamente debería significar lo mismo que Cache-Control: no-cache. Entonces tal vez esa es una forma de obtener DEBE-revalidar el comportamiento de no-cache, evitando la aparente migración de no-cache a hacer lo mismo que no-store (es decir, sin almacenamiento en caché en absoluto)?


Cuando es enviado por el agente de usuario

Creo la respuesta de shahkalpesh se aplica al lado del agente de usuario. También puedes mirar 13.2.6 Desambiguar respuestas múltiples.

Si un agente de usuario envía una solicitud con Cache-Control: max-age=0 (también conocido como "revalidación de extremo a extremo"), entonces cada caché en el camino revalidará su entrada de caché (por ejemplo, con el If-Not-Modifiedencabezado) hasta el servidor de origen. Si la respuesta es 304 (No modificado), se puede usar la entidad en caché.

Por otro lado, enviando una solicitud con Cache-Control: no-cache (también conocido como "carga de extremo a extremo") no se revalida y el servidor NO DEBE use una copia en caché al responder.


513
2017-09-05 13:43



max-age = 0

Esto es equivalente a hacer clic Refrescar, lo que significa, dame la última copia a menos que ya tenga la última copia.

no-caché 

Esto está sosteniendo Cambio al hacer clic en Actualizar, lo que significa que simplemente rehaga todo sin importar nada.


35
2018-05-12 03:59



La vieja pregunta ahora, pero si alguien más se encuentra con esto a través de una búsqueda como lo hice, parece que IE9 hará uso de esto para configurar el comportamiento de los recursos cuando se usan los botones de retroceder y avanzar. Cuando max-age = 0 se usa, el navegador usará la última versión cuando vea un recurso en una prensa de retroceso / avance. Si no-caché se usa, el recurso será reintegrado.

Se pueden ver más detalles sobre el almacenamiento en caché IE9 en este msdn caching blog post.


30
2017-11-27 09:13



En mis últimas pruebas con IE8 y Firefox 3.5, parece que ambos son compatibles con RFC. Sin embargo, difieren en su "amabilidad" con el servidor de origen. IE8 trata no-cache respuestas con la misma semántica que max-age=0,must-revalidate. Firefox 3.5, sin embargo, parece tratar no-cache como equivalente a no-store, que apesta por el rendimiento y el uso del ancho de banda.

Squid Cache, de forma predeterminada, parece que nunca almacena nada con un no-cache encabezado, al igual que Firefox.

Mi consejo sería establecer public,max-age=0 para los recursos no confidenciales que desea que haya comprobado para la frescura en cada solicitud, pero aún así permitir el rendimiento y los beneficios de ancho de banda del almacenamiento en caché. Para artículos por usuario con la misma consideración, use private,max-age=0.

Evitaría el uso de no-cache en su totalidad, ya que parece que ha sido bastardized por algunos navegadores y cachés populares para el equivalente funcional de no-store.

Además, no emule a Akamai y Limelight. Si bien esencialmente ejecutan matrices de almacenamiento en caché masivas como su negocio principal, y deben ser expertos, en realidad tienen un gran interés en hacer que se descarguen más datos de sus redes. Google podría no ser una buena opción para la emulación, tampoco. Parecen usar max-age=0 o no-cache al azar dependiendo del recurso.


23
2018-01-25 23:06



max-age
    Cuando se fuerza una caché intermedia, por medio de una directiva max-age = 0, para revalidar
su propia entrada de caché, y el cliente ha proporcionado su propio validador en la solicitud, el
el validador proporcionado puede diferir del validador actualmente almacenado con la entrada de la memoria caché.
En este caso, la memoria caché PUEDE usar cualquiera de los validadores al hacer su propia solicitud sin
afectando la transparencia semántica.

    Sin embargo, la elección del validador puede afectar el rendimiento. El mejor enfoque es para el
caché intermedia para usar su propio validador al hacer su solicitud. Si el servidor responde
con 304 (No modificado), la memoria caché puede devolver su copia ahora validada al cliente
con una respuesta de 200 (OK). Si el servidor responde con una nueva entidad y validador de caché,
sin embargo, el caché intermedio puede comparar el validador devuelto con el proporcionado en
la solicitud del cliente, utilizando la función de comparación fuerte. Si el validador del cliente es
igual a la del servidor de origen, entonces la caché intermedia simplemente devuelve 304 (no
Modificado). De lo contrario, devuelve la nueva entidad con una respuesta 200 (OK).
Si una solicitud incluye la directiva de no-caché, NO DEBE incluir min-fresh,
max-stale, o max-age. 

cortesía: http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9.4

No acepte esto como respuesta; tendré que leerlo para entender el verdadero uso de él :)


18
2018-06-26 01:44



Apenas soy un experto en almacenamiento en caché, pero Mark Nottingham sí lo es. Aquí están sus almacenar en caché documentos. Él también tiene excelentes enlaces en la sección de Referencias.

Según mi lectura de esos documentos, parece que max-age=0 podría permitir que la memoria caché envíe una respuesta almacenada en caché a las solicitudes que ingresaron al "mismo tiempo", cuando "a la misma hora" significa que se encuentran lo suficientemente juntas como para simular la memoria caché, pero no-cache no lo haría


11
2018-06-26 01:59



Por cierto, vale la pena señalar que algunos dispositivos móviles, en particular los productos de Apple, como iPhone / iPad, ignoran por completo los encabezados como sin caché, sin almacenamiento, Vence: 0 o cualquier otra cosa que intente forzarlos a no reutilizar caducados páginas de formulario.

Esto nos ha causado innumerables dolores de cabeza al intentar que el iPad de un usuario diga que se ha quedado dormido en una página a la que ha llegado mediante un proceso de formulario, digamos el paso 2 de 3, y luego el dispositivo ignora por completo la tienda / las directivas de caché, y hasta donde puedo decir, simplemente toma lo que es una instantánea virtual de la página desde su último estado, es decir, ignora lo que se dijo explícitamente y, no solo eso, toma una página que no debe almacenarse y almacenarlo sin verificarlo nuevamente, lo que lleva a todo tipo de extraños problemas de sesión, entre otras cosas.

Solo agrego esto en caso de que alguien se presente y no pueda entender por qué están recibiendo errores de sesión, particularmente con iPhones e ipads, que parecen ser, con mucho, los peores infractores en esta área.

He hecho pruebas de depuración bastante extensas con este problema, y ​​esta es mi conclusión, los dispositivos ignoran por completo estas directivas.

Incluso en el uso regular, descubrí que algunos móviles tampoco comprueban si hay nuevas versiones, por ejemplo, expira: 0 y luego verifica las últimas fechas de modificación para determinar si debería obtener una nueva.

Simplemente no sucede, así que lo que me obligaron a hacer fue agregar cadenas de consulta a los archivos css / js que necesitaba para forzar las actualizaciones, lo que engaña a los estúpidos dispositivos móviles para que crean que es un archivo que no tiene, como: mi .css? v = 1, luego v = 2 para una actualización de css / js. Esto funciona en gran medida.

Los navegadores de usuario también, por cierto, si se dejan a sus valores predeterminados, a partir de 2016, como descubro continuamente (hacemos MUCHOS cambios y actualizaciones en nuestro sitio) tampoco verificamos las últimas fechas de modificación en dichos archivos, pero la consulta el método de cadena corrige ese problema. Esto es algo que he notado con clientes y gente de oficina que tienden a usar valores predeterminados de usuario normales en sus navegadores, y que no tienen conciencia de los problemas de almacenamiento en caché con css / js, etc., casi invariablemente no logran cambiar los nuevos css / js, lo que significa que los valores predeterminados para sus navegadores, principalmente MSIE / Firefox, no están haciendo lo que se les dice que hagan, ignoran los cambios e ignoran las últimas fechas de modificación y no validan, incluso con Expira: 0 establecido explícitamente.

Este fue un buen hilo con mucha información técnica buena, pero también es importante notar lo malo que es el soporte para este material en dispositivos especialmente móviles. Cada pocos meses tengo que agregar más capas de protección contra su incumplimiento de los comandos de encabezado que reciben, o para interconectar adecuadamente esos comandos.


9
2018-04-13 19:49



Aquí hay un pequeño árbol de decisiones que espero aclarará la diferencia.

Cache-control decision tree diagram


8
2018-04-19 15:46



La diferencia es que no-cache (sin tienda en Firefox) previene cualquier tipo de almacenamiento en caché. Esto puede ser útil para evitar que las páginas con contenido seguro se escriban en el disco y las páginas que siempre deben actualizarse, incluso si se vuelven a visitar con el botón Atrás.

max-age = 0 indica que una entrada de caché está obsoleta y requiere una nueva validación, pero no impide el almacenamiento en caché. A menudo, los navegadores solo validan los recursos una vez por sesión de navegador, por lo que es posible que el contenido no se actualice hasta que se visite el sitio en una nueva sesión.

Por lo general, los navegadores no eliminarán las entradas caché expiradas, a menos que estén recuperando el espacio para contenido más nuevo cuando el caché del navegador esté lleno. Al usar sin almacenamiento, sin almacenamiento en caché, se puede eliminar explícitamente una entrada de caché.


0
2018-06-26 12:51