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

Resuelto rubyruy asked hace 15 años • 9 respuestas

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

rubyruy avatar Jun 26 '09 08:06 rubyruy
Aceptado

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

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


Cuando lo envía el servidor de origen

Creo que max-age=0simplemente les dice a los cachés (y a los agentes de usuario) que la respuesta está obsoleta desde el principio y, por lo tanto, DEBEN revalidar la respuesta (por ejemplo, con el If-Not-Modifiedencabezado) antes de usar una copia en caché, mientras que no-cacheles dice que DEBEN revalidar antes de usar una copia en caché. Copiar. Desde 14.9.1 ¿Qué se puede almacenar en caché ?

sin caché

...un caché NO DEBE utilizar la respuesta para satisfacer una solicitud posterior sin una revalidación exitosa con el servidor de origen. Esto permite que un servidor de origen evite el almacenamiento en caché incluso en cachés que se han configurado para devolver respuestas obsoletas a las solicitudes de los clientes.

En otras palabras, los cachés a veces pueden optar por usar una respuesta obsoleta (aunque creo que luego deben agregar un Warningencabezado), pero no-cachedicen que no pueden usar una respuesta obsoleta pase lo que pase. Tal vez desee el comportamiento DEBE revalidar cuando se generen estadísticas de béisbol en una página, pero querrá el comportamiento DEBE revalidar cuando haya generado la respuesta a una compra de comercio electrónico.

Aunque tiene razón en su comentario cuando dice que no-cacheno se supone que evite el almacenamiento, en realidad podría haber otra diferencia al usar no-cache. Encontré una página, Directivas de control de caché desmitificadas , que dice (no puedo garantizar que sea correcta):

En la práctica, IE y Firefox han comenzado a tratar la directiva sin caché como si le indicara al navegador que ni siquiera almacene en caché la página. Comenzamos a observar este comportamiento hace aproximadamente un año. Sospechamos que este cambio fue provocado por el uso generalizado (e incorrecto) de esta directiva para evitar el almacenamiento en caché.

...

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

Aparte, me parece que Cache-Control: max-age=0, must-revalidatebásicamente debería significar lo mismo que Cache-Control: no-cache. Entonces, ¿tal vez esa sea una forma de obtener el comportamiento DEBEno-cache revalidar de , evitando al mismo tiempo la aparente migración de no-cachehacer lo mismo que no-store(es decir, sin almacenamiento en caché de ningún tipo)?


Cuando lo envía el agente de usuario

Creo que la respuesta de shahkalpesh se aplica al lado del agente de usuario. También puedes consultar 13.2.6 Desambiguación de 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 un extremo a otro"), cada caché a lo largo del 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 utilizar la entidad almacenada en caché.

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

Michael Krebs avatar Sep 05 '2009 13:09 Michael Krebs

edad máxima = 0

Esto equivale a hacer clic en Actualizar , lo que significa darme la última copia a menos que ya tenga la última copia.

sin caché

Esto es mantener presionada la tecla Mayús mientras haces clic en Actualizar, lo que significa que simplemente rehaces todo pase lo que pase.

G. Cheng avatar May 12 '2015 03:05 G. Cheng

Vieja pregunta ahora, pero si alguien más encuentra esto a través de una búsqueda como lo hice yo, parece que IE9 hará uso de esto para configurar el comportamiento de los recursos al usar los botones de avance y retroceso. Cuando se usa max-age=0 , el navegador usará la última versión al ver un recurso al presionar hacia atrás/adelante. Si no se utiliza caché, se recuperará el recurso.

Se pueden ver más detalles sobre el almacenamiento en caché de IE9 en esta publicación del blog sobre almacenamiento en caché de msdn .

El Yobo avatar Nov 27 '2010 09:11 El Yobo

En mis pruebas recientes con IE8 y Firefox 3.5, parece que ambos cumplen con RFC. Sin embargo, difieren en su "amistad" con el servidor de origen. IE8 trata no-cachelas respuestas con la misma semántica que max-age=0,must-revalidate. Firefox 3.5, sin embargo, parece tratarse no-cachecomo equivalente a no-store, lo que apesta en términos de rendimiento y uso de ancho de banda.

Squid Cache, por defecto, parece nunca almacenar nada con un no-cacheencabezado, al igual que Firefox.

Mi consejo sería configurar public,max-age=0recursos no confidenciales cuya actualización desee verificar en cada solicitud, pero aún así permitir los beneficios de rendimiento y ancho de banda del almacenamiento en caché. Para elementos por usuario con la misma consideración, utilice private,max-age=0.

Yo evitaría el uso de no-cachepor completo, ya que parece que algunos navegadores y cachés populares lo han bastardeado hasta convertirlo en el equivalente funcional de no-store.

Además, no emule a Akamai y Limelight. Si bien básicamente ejecutan matrices de almacenamiento en caché masivas como su negocio principal y deberían ser expertos, en realidad tienen un gran interés en provocar que se descarguen más datos de sus redes. Puede que Google tampoco sea una buena opción para la emulación. Parecen usarse max-age=0o no-cachealeatoriamente dependiendo del recurso.

rmalayter avatar Jan 25 '2010 23:01 rmalayter
edad máxima
    Cuando se fuerza una caché intermedia, mediante una directiva max-age=0, a 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 caché.
En este caso, el caché PUEDE utilizar cualquiera de los validadores para realizar su propia solicitud sin
afectando la transparencia semántica.

    Sin embargo, la elección del validador podría afectar el rendimiento. El mejor enfoque es para el
caché intermedia para utilizar su propio validador al realizar su solicitud. Si el servidor responde
con 304 (No modificado), entonces el caché puede devolver su copia ahora validada al cliente
con una respuesta 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 al del servidor de origen, entonces el caché intermedio simplemente devuelve 304 (no
Modificado). De lo contrario, devuelve la nueva entidad con una respuesta 200 (OK).

    Si una solicitud incluye la directiva no-cache, 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 comprender su verdadero uso :)

shahkalpesh avatar Jun 26 '2009 01:06 shahkalpesh