2011-09-27 16 views
13

No encuentro la diferencia práctica entre Cache-Control:no-store y Cache-Control:no-cache.¿Cuál es la diferencia entre no-cache y no-store en Cache-control?

Por lo que sé, no-store significa que ningún dispositivo de caché puede cachear esa respuesta. Por otro lado, no-cache significa que ningún dispositivo de caché puede enviar una respuesta en caché sin validarla primero con el origen. Pero, ¿de qué se trata esa validación? Condicional get?

¿Qué sucede si una respuesta tiene no-cache, pero no tiene Last-Modified o ETag?

Atentamente.

Respuesta

12

Pero, ¿de qué es esa verificación?

Comprobando exactamente Last-Modified o ETag. El cliente le preguntaría al servidor si tiene una nueva versión de datos usando esos encabezados y, si la respuesta es no, servirá datos almacenados en caché.


actualización

De RFC

no-cache 
    If the no-cache directive does not specify a field-name, then a cache MUST NOT use 
the response to satisfy a subsequent request without successful revalidation with the 
origin server. This allows an origin server to prevent caching even by caches that 
have been configured to return stale responses to client requests. 
+0

y si la respuesta en caché no tiene 'Last-Modified' ni' ETag'? – vtortola

+0

Creo que en este caso la respuesta no se almacenará en caché. –

+0

Así interpreto RFC. (Fragmento agregado) –

2

Como se ha identificado, sin -caché no significa que nunca haya almacenamiento en caché, sino que el agente de usuario siempre debe preguntar al servidor si está bien usar lo que almacena en caché. Por el contrario, no-store dice que ni siquiera guarda una copia, lo que significa que no hay nada sobre lo que preguntar. Si conoce la respuesta a "¿Puedo reutilizar esto?" siempre es no, obtienes un aumento de rendimiento al (1) omitir la sobrecarga de las preguntas y (2) no desechar ningún resultado almacenado posiblemente reutilizable para dejar espacio para el nuevo resultado que nunca se reutilizará.

Aparte del rendimiento, existe una diferencia de comportamiento con historial del navegador. La sección de especificaciones HTTP 1.1 13.13 dice que "el tiempo de caducidad no se aplica a los mecanismos de historial". El encabezado sin memoria caché describe la caducidad y, por lo tanto, no se aplica a los mecanismos de historial, como el botón Atrás. Por lo tanto, el usuario puede navegar hacia atrás a una página anterior sin caché sin que se contacte al servidor.

El encabezado sin tienda, por otro lado, impide que los datos se almacenen fuera de una sesión, en cuyo caso simplemente no está disponible para que lo use un mecanismo de historial. Sin tienda, si el usuario finaliza su sesión navegando a otro dominio y luego regresa, la única forma de que el navegador sepa qué mostrar es volver a obtener la página inicial del servidor.

Así es como un Chromium issue sobre este tema hace la distinción:

no-cache no significa "no almacenar en caché este" (que sería no-store). no-cache significa que no use esto para cargas normales a menos que el recurso se revalide por frescura. Las navegaciones de historial no son cargas normales.

Cuestiones relacionadas