Pregunta

Al principio, el almacenamiento en caché no funcionaba en todos los navegadores. Luego lo hice funcionar en todos los navegadores pero IE (IE8) agregando la extensión .pdf a la url. Servlet dejó de ser llamado después de eso.

Muestro el archivo pdf en línea en la página web a través de la etiqueta EMBED que carga la siguiente url:

http://localhost:7001/app/viewFile.pdf

El cual es generado por el servlet java con los siguientes encabezados:

response.addHeader("Content-Disposition", "inline;");
response.setHeader("Cache-control", "cache,max-age=600");
response.setContentType(mimeType);
response.setContentLength(contentLength);

Para el pdf que se muestra en todos los navegadores, utilizo Adobe Reader 9.2.0.

¿Cómo hacer que funcione en IE también? Noté que IE agrega el encabezado 'Cache-Control: no-cache' a la solicitud , mientras que Safari, por ejemplo, no.

¿Fue útil?

Solución

Como se dijo antes, la control-caché el valor del encabezado cache no es válido. Utilice public en su lugar.

En cuanto a que IE no cumple con las reglas de control de caché del lado del servidor en los elementos embed y object , esta es, desafortunadamente, una característica de " " de IE. Lo mejor que puedes hacer es reemplazarlo por un elemento iframe .

Otros encabezados como caducan , última modificación , etag y así sucesivamente no van a ayudar.

Otros consejos

Algunas ideas para mirar:

  1. No creo que cache sea una directiva válida de Cache-Control .

    Intente utilizar un valor de public en su lugar, o private si es más apropiado para su contenido. Consulte RFC 2616 para obtener más información.

  2. Quizás estés enviando más de uno. Cache-Control directiva?

    Usa una herramienta como Firebug o LiveHTTPHeaders para echar un vistazo a la encabezados reales son sus navegadores recepción. Asegúrate de que no lo estén conseguir algo que no esperas Suena como si ya estuvieras haciendo esto sin embargo También asegúrate de no enviar también Pragma: no-cache .

  3. Prueba a configurar Caduca encabezado además de usar Cache-Control .

    también es posible estás enviando el navegador Cache-Control / Pragma en conflicto encabezados e IE elige tomar el Los encabezados de Pragma como primera prioridad por cualquier razón al revés.

  4. ¡Asegúrese de que IE esté configurado para permitir el almacenamiento en caché! :)

    Panel de control > Opciones de Internet > Archivos temporales de Internet > Configuración > Compruebe si hay nuevas versiones de las páginas almacenadas

  5. Intente enviar el PDF como respuesta a una solicitud de POST (mediante envío de formulario).

    IE permite que se realice un caché independientemente de los encabezados en la respuesta debido a este requisito de RFC 2616 : " De forma predeterminada, una respuesta se puede almacenar en caché si los requisitos del método de solicitud, los campos del encabezado de la solicitud, y el estado de la respuesta indican que se puede almacenar en caché. " Las respuestas a las solicitudes de POST NO son cacheables, por lo que IE no debe incluir ese encabezado en su solicitud.

  6. Intente enviar los encabezados Content-MD5 y Last-Modified con valores consistentes (si aún no se han enviado).

    Esto podría ayudar a convencer a IE de que el contenido del PDF no ha cambiado. No creo que esta solución funcione, porque IE es obviamente obstinado, pero vale la pena mencionarlo.

Bueno, una forma obvia de solucionar el problema es usar la reescritura de URL. Si IE trabaja con .pdf en la extensión, use mod_rewrite (Apache) o una herramienta similar para redirigir al lado del servidor a la página correcta, mientras hace que el cliente piense que efectivamente está solicitando un archivo PDF.

También: revise los encabezados HTTP que recibe el cliente usando una herramienta como Fiddler.

También: revise esta pregunta anterior ( PHP: Forzar la descarga de archivos y IE, una vez más ), también he tenido problemas similares con IE al no forzar las descargas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top