2011-01-18 12 views
7

Estaba tratando de encontrar una manera de evitar que los navegadores guarden en caché el PDF que se está cargando mediante métodos de transmisión.Cómo evitar el almacenamiento en caché Al utilizar PDF Streaming con Acrobar Reader 10.0 (HTTP1.0/HTTP1.1)

ofertas de Firefox y Chorme muy bien con los siguientes encabezados y no almacenar en caché cualquier archivo PDF:

Response.AddHeader ("Pragma", "no-cache, no-store"); Response.AddHeader ("Cache-Control", "no-cache, no-store, must-revalidate, max-age = 0"); Response.AddHeader ("Caduca", "-1");

Aunque, IE 7 (con Acrobat Reader 9.4.1) sólo funciona con las siguientes cabeceras y evitar el almacenamiento en caché del documento pdf:

Response.AddHeader ("Pragma", "no-cache, no- almacenar"); Response.AddHeader ("Cache-Control", "private, must-revalidate, max-age = 0"); Response.AddHeader ("Caduca", "-1");

Cuando estaba tratando de usar IE 7 con Acrobat Reader 10, el encabezado anterior no hacía ninguna diferencia y almacenaba en caché el PDF sin importar lo que había intentado.

Cuando intento poner Cache-Control: no-cache, no-store, el pdf no se ha cargado en absoluto. Según tengo entendido, IE utiliza el mecanismo de caché para cargar los documentos PDF.

¿Hay alguien familiarizado con una forma global o específica (mediante el uso de otros encabezados, por ejemplo) que pueden ayudar a evitar el almacenamiento en caché de documentos PDF?

Respuesta

0

El control de la configuración de la caché por la tubería no es infalible. La alternativa es codificar el tiempo real y la fecha en el nombre de archivo del PDF.

+0

Gracias, algunos ejemplos? – Niv

0

Puede codificar la fecha y hora en el nombre de archivo del PDF para que cada vez que se realiza una solicitud, el nombre de archivo sea único.

Response.AddHeader "Content-Disposition","attachment;filename=somename" + CurrentDate() + Currenttime() ".pdf"

CurrentDate adn CurrentTime funciones son imaginarios. Necesitas escribir ese código.

+0

enviando este encabezado, el navegador me pide que descargue el archivo. cuando traté de poner "en línea" en lugar de "adjunto" todavía se guarda en el caché. ¿Alguna sugerencia sobre cómo puedo transmitir los documentos en PDF sin almacenarlos en la memoria caché? – Niv

+1

Pensé que el motivo por el que no deseaba que el documento PDF se almacenara en caché era garantizar que se generara un nuevo PDF cada vez. Ahora, me doy cuenta de que quiere evitar que se almacene en el cliente. Bueno, puedes crear un applet de Java que descargue el PDF y lo muestre y cuando el usuario termine con él lo eliminará. El servidor podría cifrarlo y el applet podría descifrarlo para mayor seguridad. Aquí hay un ejemplo de nuestro visualizador de PDF de Java que puede mostrar el PDF dentro de una página web http://www.gnostice.com/nl_article.asp?id=195&t=A_Java_PDF_Web_Viewer_-_Powered_By_PDFOne_(for_Java_trade;) – BZ1

+0

Hola, gracias por tu respuesta. Estoy buscando un sulotion que no incluye terceros o un código externo. simplemente tratando de comprender por qué el navegador (o el complemento acrobat) ignora los encabezados especificados. Gracias de antemano por su respuesta. – Niv

1

Este problema de mostrar en PDF (y otros tipos de documentos) en línea con el uso del encabezado sin memoria caché se ha archivado como un error en Microsoft: http://support.microsoft.com/kb/316431. IE usa su propio mecanismo de almacenamiento en caché cuando lee archivos PDF en línea.

Desafortunadamente, la gente de M $ dijo que esto "funciona según lo diseñado" y que los usuarios no deberían usar el encabezado sin caché ... vaya figura.

Puede probar la idea de VSU de usar un lector de PDF Java ... También puedo seguir esta ruta.

7

Agregue un número aleatorio a la URL, ya sea en la ruta o en la cadena de consulta. De esta forma, descargará el archivo cada vez. También puede cambiar el número solamente, si el archivo ha cambiado, por ejemplo, usando el mtime del archivo.

PHP (ya que todo el mundo entiende que, aunque nadie le gusta):

<a href="document.pdf?buster=<?= time() ?>">Download PDF</a> 
+0

Esto es sin duda un trabajo de reparación elegante para este tipo de problema. – Grubsnik

+0

Esto no funcionará si el pdf en el servidor tiene espacios en el nombre. – sskoko

+0

¿Por qué no funcionaría si el nombre de archivo tiene un espacio? – Robban1980

Cuestiones relacionadas