Me han dicho que evite la filtración de información del usuario, solo "sin caché" como respuesta no es suficiente. "sin tienda" también es necesario.
Cache-Control: no-cache, no-store
Después de leer esta especificación http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html , todavía no estoy muy seguro de por qué.
Mi entendimiento actual es que es solo para el servidor de caché intermedio. Incluso si la respuesta es "sin caché", el servidor de caché intermedio aún puede guardar el contenido en un almacenamiento no volátil. El servidor de caché intermedio decidirá si utiliza el contenido guardado para la siguiente solicitud. Sin embargo, si la respuesta es "sin almacenamiento", se supone que el servidor de caché intermedio no debe almacenar el contenido. Entonces, es más seguro.
¿Hay alguna otra razón por la que necesitemos "sin caché" y "sin almacenamiento"?
no-cache
no significa lo que crees que hace. En realidad, significa "por favor, vuelva a validar".Respuestas:
Debo aclarar que eso
no-cache
no significa no guardar en caché . De hecho, significa "revalidar con el servidor" antes de usar cualquier respuesta almacenada en caché que pueda tener, en cada solicitud.must-revalidate
, por otro lado, solo necesita revalidar cuando el recurso se considera obsoleto.Si el servidor dice que el recurso sigue siendo válido, la caché puede responder con su representación, aliviando así la necesidad de que el servidor vuelva a enviar el recurso completo.
no-store
es efectivamente la directiva full not cache y está destinada a evitar el almacenamiento de la representación en cualquier forma de caché.Digo lo que sea, pero tenga en cuenta esto en la especificación HTTP RFC 2616:
Pero esto se omite de la especificación HTTP RFC 7234 más reciente en un intento potencial de
no-store
fortalecerla, consulte:http://tools.ietf.org/html/rfc7234#section-5.2.1.5
fuente
Cache-Control: no-store
suficiente?no-store
y describeno-cache
como si no tuviera caché en absoluto ... ¡Estoy confundido!Bajo ciertas circunstancias, IE6 aún almacenará archivos en caché incluso cuando
Cache-Control: no-cache
esté en los encabezados de respuesta.El W3C establece
no-cache
:En mi aplicación, si visitaba una página con el
no-cache
encabezado, luego se desconectaba y luego volvía a presionar en su navegador, IE6 aún tomaría la página del caché (sin una nueva solicitud / validación al servidor). Agregar elno-store
encabezado lo detuvo. Pero si toma la palabra del W3C, en realidad no hay forma de controlar este comportamiento:Las diferencias generales entre el historial del navegador y el almacenamiento en caché HTTP normal se describen en una subsección específica de la especificación .
fuente
no-store
. De lo contrario, Chrome mostrará datos almacenados en caché / búfer al usar el botón Atrás.no-cache
encabezado. La cita del W3C inmediatamente a continuación deja en claro que este no es el caso; más bien, elno-cache
encabezado solo significa que la respuesta debe ser revalidada antes de ser reutilizada para atender solicitudes posteriores.De la especificación HTTP 1.1 :
fuente
no-cache
ymax-age=0
decir que el artículo debe considerarse obsoleto. Esto significa que debe ser revalidado antes de ser notificado. Esto significa que una caché podría almacenar el archivo y luego realizar una solicitud condicional a la que el servidor podría responder304 NOT MODIFIED
. Obviamente, esto es una gran ventaja, ya que no es necesario generar y enviar el cuerpo de la respuesta. Entonces, para aprovechar esta cantidad (¿la mayoría?) De los cachés, se almacenarán lasno-cache
respuestas.Si desea evitar todo el almacenamiento en caché (por ejemplo, forzar una recarga cuando se usa el botón Atrás), necesita:
sin caché para IE
sin tienda para Firefox
Aquí está mi información sobre esto:
http://blog.httpwatch.com/2008/10/15/two-important-differences-between-firefox-and-ie-caching/
fuente
no-store
no debería ser necesario en situaciones normales y puede dañar tanto la velocidad como la usabilidad. Está diseñado para su uso donde la respuesta HTTP contiene información tan sensible que nunca debería escribirse en una caché de disco, independientemente de los efectos negativos que crea para el usuario.Cómo funciona:
Normalmente, incluso si un agente de usuario, como un navegador, determina que una respuesta no debe almacenarse en caché, aún puede almacenarla en el caché del disco por razones internas del agente de usuario. Esta versión se puede utilizar para funciones como "ver fuente", "volver", "información de la página", etc., donde el usuario no necesariamente ha solicitado la página nuevamente, pero el navegador no la considera una nueva vista de página. y tendría sentido ofrecer la misma versión que el usuario está viendo actualmente.
El uso
no-store
evitará que se almacene esa respuesta, pero esto puede afectar la capacidad del navegador para dar "ver fuente", "volver", "información de página", etc. sin realizar una nueva solicitud separada para el servidor, lo cual no es deseable. En otras palabras, el usuario puede intentar ver la fuente y, si el navegador no la guardó en la memoria, se le dirá que esto no es posible o provocará una nueva solicitud al servidor. Por lo tanto,no-store
solo debe usarse cuando la experiencia del usuario impedida de estas funciones que no funcionan correctamente o rápidamente se ve superada por la importancia de garantizar que el contenido no se almacene en la caché.Esto es incorrecto. Los servidores de caché intermedios compatibles con HTTP 1.1 obedecerán las instrucciones
no-cache
ymust-revalidate
, asegurando que el contenido no se almacene en caché. El uso de estas instrucciones asegurará que la respuesta no sea almacenada en caché por ningún caché intermedio y que todas las solicitudes posteriores se envíen de vuelta al servidor de origen.Si el servidor de caché intermedio no es compatible con HTTP 1.1, deberá utilizar
Pragma: no-cache
y esperar lo mejor. Tenga en cuenta que si no es compatible con HTTP 1.1, deno-store
todos modos es irrelevante.fuente
no-cache
mantiene una frescura rígida sin sacrificar todos los beneficios del almacenamiento en caché, lo que significa que el caché se almacena y se usa nuevamente si el servidor responde con 304 Not Modified.Si un sistema de almacenamiento en caché implementa correctamente la ausencia de almacenamiento, entonces no necesitaría la ausencia de caché. Pero no todos lo hacen. Además, algunos navegadores implementan sin caché como si no hubiera tienda. Por lo tanto, aunque no es estrictamente necesario, probablemente sea más seguro incluir ambos.
fuente
Tenga en cuenta que Internet Explorer desde la versión 5 hasta la 8 arrojará un error al intentar descargar un archivo servido a través de https y el servidor que envía
Cache-Control: no-cache
oPragma: no-cache
encabezados.Ver http://support.microsoft.com/kb/812935/en-us
El uso de
Cache-Control: no-store
yPragma: private
parece ser lo más parecido que todavía funciona.fuente
Cache-Control: no-store, no-cache, must-revalidate
en ese orden exacto para que funcione. Sin embargo, eso no funcionó en nuestro escenario, pero lo que @bassim sugirió anteriormente sí. ¡Gracias!Para Chrome, no se usa caché para recargar la página en una nueva visita, pero aún la almacena en caché si regresa al historial (botón de retroceso). Para volver a cargar la página para el historial también, use no-store. IE necesita ser revalidado para funcionar en todas las ocasiones.
Así que para asegurarme de evitar todos los errores y malas interpretaciones que siempre uso
si quiero asegurarme de que se vuelva a cargar.
fuente
Originalmente usamos sin caché hace muchos años y tuvimos algunos problemas con el contenido obsoleto con ciertos navegadores ... Desafortunadamente, no recuerdo los detalles.
Desde entonces, nos habíamos decidido SÓLO por el uso de no-tienda. Desde entonces, nunca miré hacia atrás ni tuve un solo problema con contenido obsoleto por parte de ningún navegador o intermediarios.
Este espacio está ciertamente dominado por la realidad de las implementaciones frente a lo que se ha escrito en varios RFC. Muchos representantes en particular tienden a pensar que hacen un mejor trabajo al "mejorar el desempeño" reemplazando la política que se supone que deben seguir por la suya propia.
fuente
no-store
.Para empeorar aún más las cosas, en algunas situaciones, no se puede usar sin caché, pero sin almacenamiento sí:
http://faindu.wordpress.com/2008/04/18/ie7-ssl-xml-flex-error-2032-stream-error/
fuente
OWASP analiza esto:
Fuente aquí .
fuente
no-cache
dice que no puede usarlo sin validarlo con el servidor. Si su copia en caché aún es buena, el servidor responderá con un 304 y luego usará su copia en caché. Le ahorra una descarga de red potencialmente grande.no-store
por otro lado, dice que no está permitido almacenar en caché los datos en absoluto.